索引常见的数据结构B-Tree Hash
如何创建索引
create index index_name on table_name(col_name[length] [ASC/DESC])
例如
mysql > create index cityname on city(city(10))
设计索引的原则:
- 搜索的索引列
- 使用唯一索引
- 索引越短越好,考虑到IO的性能
- 利用最左前缀
- 不要过度索引
mysql索引失效的几种情况
1.索引无法存储null值
- 单列索引无法存储null值 复合索引无法存储全是null的值
- 单列索引为null时不能利用到索引 只能全表扫描(索引失效)
为什么索引不能存储为null?
- 索引是有序的。null放进去无法比较,无法确定放在哪里
- 要把空值放入到索引中简历一个复合索引
2.不适合键值较少的列
3.前导模糊查询不能利用索引
- 例如 like '%XX' 或者like '%XX%' ,由于前面时模糊的 所以不能利用索引的顺序必须查找每一个(索引会失效)
- 如果是like 'A%' 就可以查找以A开头的位置
4.索引失效的几种情况
- 如果提交中有or 即使其中有条件带索引也不会使用
- 对于多列索引如果不是使用的第一部分,则不会使用索引
- 以like查询%开头的
- 如果列是字符串要使用引号引起来不然不使用索引