一次性解决Mysql面试常见问题-----索引相关

索引常见的数据结构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查询%开头的
  • 如果列是字符串要使用引号引起来不然不使用索引

猜你喜欢

转载自blog.csdn.net/qq_24532581/article/details/88778446