联合索引

索引

索引的使用

什么时候使用索引表的主关键字

  1. 表的字段唯一约束
  2. 直接条件查询的字段
  3. 查询中与其它表关联的字段
  4. 查询中排序的字段
  5. 查询中统计或分组统计的字段

什么情况下应不建或少建索引

  1. 表记录太少
  2. 经常插入、删除、修改的表
  3. 数据重复且分布平均的表字段
  4. 经常和主字段一块查询但主字段索引值比较多的表字段

复合索引

命中规则

  1. 需要加索引的字段,需要在where条件中
  2. 数据量少的字段不需要索引
  3. 如果where条件中是or条件,加索引不起作用
  4. 符合最左原则
  • 最左原则:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找
  • 在创建符合索引时,应该仔细考虑列的顺序,对索引中的所有列搜索或对钱几列进行搜索时,符合索引非常有用。
  • 当一个表有多条索引可走时, Mysql 根据查询语句的成本来选择走哪条索引, 联合索引的话, 它往往计算的是第一个字段(最左边那个), 这样往往会走错索引

在mysql中使用索引注意

  1. 只要列中包含有null值将不会包含在索引中,复合索引只要有一列含有null值,那么这一列对于此复合索引就是无效的
  2. 对串列进行索引,如果可能应该指定一个前缀长度
  3. mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
  4. like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
  5. 不要在列上进行运算
  6. NOT IN和操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替

https://www.cnblogs.com/softidea/p/5977860.html

你可能感兴趣的:(联合索引)