MySQL索引,快速记忆法( 二 )


  1.  
那么为什么InnoDB没有了这个变量呢?
  1. InnoDB支持表、行(默认)级锁 , 而MyISAM仅支持表级锁
  2. InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列Row_id来充当默认主键) , 而Myisam可以没有主键
  3. Innodb存储文件有frm、ibd , 而Myisam是frm、MYD、MYI
  • Innodb:frm是表定义文件 , ibd是数据文件
  • Myisam:frm是表定义文件 , myd是数据文件 , myi是索引文件
索引失效的场景
  1. 对索引列使用了函数、表达式或运算符:当查询条件中使用了函数、表达式或运算符时 , MySQL就无法使用该列的索引 , 因为它需要对每行数据进行计算 , 而不是直接查找索引 。
  2. 查询条件中使用了不等于操作符(<>、!=)、NOT NULL, NOT IN 等
  3. 模糊查询:当查询条件中使用了LIKE、%或_等模糊匹配符号时 , MySQL无法使用索引进行快速定位 。
  4. OR条件:当查询条件中包含多个OR条件时 , MySQL无法使用索引进行快速定位 。
  5. 范围查询:当查询条件中使用了BETWEEN、<、>、<=、>=等操作符时 , MySQL只能使用索引中的一部分数据 , 需要读取更多的数据进行过滤 , 降低了查询效率 。
  6. 数据类型不匹配 , 需要隐式转换类型
  7. 对索引列进行排序 , 因为它需要将数据按照指定的顺序进行排序
  8. 复合索引 , 如果不使用前列 , 后续列也将无法使用
小结正确的使用索引 , 能够显著提高数据库的查询效率 。本文汇总了MySQL索引的常用知识点 , 帮助大家快速记忆 , 快快收藏吧 。




推荐阅读