MySQL数据库索引

1、需要用到索引的情况:数据量较大时

2、使用索引的代价:数据更新时,索引文件也要更新

3、什么样的查询会用到索引:

  最左前缀原理(索引条件紧跟where)

  全列匹配,按照索引中所有列进行精确匹配(这里的精确匹配指的是“=”或“IN”)

  查询条件用到了索引中列的精确匹配,但是中间某个未提供,用到了索引(只用到最左)

  使用like查询时%不在第一位,比如select * from table where rolename like ‘苏铭%’

  一次查询只会用到一个索引,查询时尽量遵循最左前缀原理

4、什么样的查询不会用到索引:

  查询条件中不包含索引列(显然)

  索引列使用了函数或表达式,如select * from table_name where to_days(col_time) >= 729669,col_time使用了函数,不能使用索引,可以改成这样,select * from table_name where col_time<FROM_DAYS(729669) 。当然最好是把FROM_DAYS(729669)通过程序实现传递给Sql语句。

  索引列使用like查询的时候%在前面,如select * from table where rolename like ‘%铭枫’,此时即使rolename列建立了索引在查询的时候也不会被使用

5、其他用到索引的条件:

  不使用<> ,用or 代替

  不使用!= 和not in,用not exists代替

  不使用is null 和 is not null

  索引列不能参与计算,保持列“干净”。

  使用匹配的数据类型,查询时字段数据类型和查询条件值数据类型要统一(显然),要特别注意区分数据库中的date和datetime

6、两种创建索引的方式:

  CREATE INDEX index_name ON table_name (column)

  ALTER TABLE table_name ADD INDEX index_name (column)

7、删除索引的方式:

  DROP INDEX index_name ON table_name

  ALTER TABLE table_name DROP INDEX index_name

  ALTER TABLE table_name DROP PRIMARY KEY(删除主键索引)

8、B+树索引和Hash索引:

  Innodb和MyISAM默认的索引是B+树索引;而Mermory默认的索引是Hash索引。

  B+树索引可以等值判断和范围查询,而hash索引只能适用于等值判断。

9、强制使用索引和禁止使用索引:

  select * from table force index(PRI) limit 2;(强制使用主键索引)

  select * from table ignore index(PRI) limit 2;(禁止使用主键索引)

原文地址:https://www.cnblogs.com/csfeng/p/8670011.html