索引可以加快大数据量的查询速度,索引本质上也是一张表保存主键和索引字段,并指向实体表的记录,因此如果滥用索引可能会导致更新数据的速度降低,因为mysql不仅仅需要保存数据还要保存索引,索引分为单列索引和组合索引,单列索引只一张表多个列单独为索引,组合索引是一个索引包含多个列。Mysql数据库多为B+tree来实现索引
关于组合索引的最佳左前缀法则,组合索引在引用的时候,不能中断,不能没有最左侧索引。例子一个名为idx的索引包涵name(a) age(b) msg(c)三个字段。
索引失效的几种情况:
在索引上做任何操作(计算,函数,自动或者手动的类型转换)会导致索引失效转为全表扫描
在使用不等于符号(!=),会导致索引失效。
字符串不加单引号也会导致索引失效(猜测为自动的类型转换)
使用or作为条件链接也会有可能导致失效
创建索引
Create INDEX indexname ON tablename(column_name)
CREATE INDEX idx_nameAgePos ON staff(name, age, pos);
修改表结构(添加索引)
alter table tablename add INDEX
删除索引
DROP INDEX [indexName] ON mytable;
关于:Explain
Explain 是mysql里查询语句是否使用了索引 是否使用了全局扫描一般用于优化sql语句。