Mysql 存储引擎的区别以及索引查询失效的情况 - Sam Xiao

Mysql 存储引擎的区别以及索引查询失效的情况 - Sam Xiao

💡 原文中文,约2100字,阅读约需5分钟。
📝

内容提要

存储引擎决定表的存储方式。InnoDB支持事务和外键,而MyISAM不支持。MEMORY表数据存储在内存中,速度快;Archive表则采用压缩存储,性能高。索引失效的情况包括使用OR条件、LIKE以'%'开头和列上有运算等。

🎯

关键要点

  • 存储引擎决定表的存储方式,可以通过SHOW ENGINES命令查询支持的存储引擎。
  • InnoDB支持事务和外键,适合频繁的更新与删除,但读写效率较差,空间占用大。
  • MyISAM不支持事务和外键,锁级别为表锁,INSERT和UPDATE操作需要锁定整个表。
  • MEMORY表数据存储在内存中,速度快,默认使用Hash索引,也可改为B型树索引。
  • Archive表采用zlib格式压缩存储,数据量比MyISAM小约75%,比InnoDB小约83%,不允许有索引与主键。
  • 索引失效的情况包括使用OR条件、LIKE以'%'开头、列上有运算、条件中未使用引号、连接查询字段编码格式不一致等。
  • 如果MySQL估计全表扫描比使用索引快,则不使用索引,连接查询中第一张表不会走索引。

延伸问答

MySQL中有哪些存储引擎?

MySQL中主要的存储引擎包括InnoDB、MyISAM、MEMORY和Archive。

InnoDB存储引擎的特点是什么?

InnoDB支持事务和外键,适合频繁的更新与删除,但读写效率较差,空间占用大。

MyISAM存储引擎有什么限制?

MyISAM不支持事务和外键,锁级别为表锁,INSERT和UPDATE操作需要锁定整个表。

MEMORY表的存储方式是什么?

MEMORY表的数据存储在内存中,速度快,默认使用Hash索引,也可改为B型树索引。

索引失效的常见情况有哪些?

索引失效的情况包括使用OR条件、LIKE以'%'开头、列上有运算、条件中未使用引号等。

Archive表的存储特点是什么?

Archive表采用zlib格式压缩存储,数据量比MyISAM小约75%,比InnoDB小约83%,不允许有索引与主键。

➡️

继续阅读