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;(禁止使用主键索引)