sql之索引
作用:
- 约束
- 加速查找
普通索引:加速查找
create index 索引名称 on 表名(列名,)
drop index 索引名称 on 表名
主键索引:加速查找+不能为空+不能重复
create unique index 索引名称 on 表名(列名)
drop unique index 索引名称 on 表名
唯一索引:加速查找+不能重复
组合索引:
- 最左前缀匹配,即要用索引,where里一定要先用上最左列。
如组合索引为(name,email)
name and email --使用索引
name --使用索引
email --不使用索引
- 经常用多列用组合索引好,单列多的话用索引合并好
create unique index 索引名称 on 表名(列名,列名)
drop
覆盖索引
在索引文件里直接获取数据
索引合并
把多列索引合并使用
建立索引其实是另建文件保存特殊的数据结构,按hash或btree规则存放。
查询快,插入删除更新慢。
命中索引:(避免使用以下)
- like '%xy'
- 函数,如reverse()
- or
- 类型不一致。如果列是字符串类型,传入条件必须要用引号引起来
- !=
- >
- order by
避免性能低下的注意事项:
- 避免使用select *
- count(1) 或count(列名)代替 count(*)
- 创建表时尽量用char代替varchar
- 表的字段顺序 固定长度的字段优先
- 组合索引代替多个单列索引(经常使用多个条件查询时)
- 尽量使用短索引(如create index on tb(title(16))
- 使用join代替子查询(mysql中一样,其他的sql有区别)
- 连表时注意条件类型需一致(如不要轻易该char 为int)
- 索引散列值(重复少)不适合建索引,如性别不适合