- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
MySQL索引面试题及答案
问:什么是MySQL索引?它有什么用?
答:MySQL索引就像书的目录,是帮助数据库快速找到数据的数据结构。主要作用是提高查询数据的速度,减少数据库扫描的数据量,还能加速排序和分组操作。
问:MySQL里常见的索引类型有哪些?
答:常见的有主键索引,就是基于主键创建的,一个表只能有一个;还有二级索引,也叫辅助索引,是基于非主键列建的,一个表可以有多个;聚集索引和非聚集索引也是常见的,聚集索引的叶子节点存的是完整数据行,非聚集索引叶子节点存的是指向数据行的指针。
问:为什么MySQL索引常用B+树而不是B树?
答:B+树的非叶子节点不存实际数据,只存索引键,所以同样大小的节点能存更多索引,树的高度更低,查询时IO操作更少。而且B+树叶子节点是按顺序连起来的,范围查询更高效,B树范围查询得来回跳。
问:创建索引有什么好处和坏处?
答:好处是能提高查询速度,特别是大数据量的时候;加速排序、分组操作。坏处是索引会占存储空间;插入、更新、删除数据时,索引也要维护,会变慢;太多索引还会影响查询优化器的判断。
问:什么情况下适合创建索引?
答:经常被查询的列,比如where条件里的列;经常用于连接的列,比如join条件里的;经常需要排序或分组的列;主键和唯一约束的列,数据库会自动建索引。
问:什么情况下不适合创建索引?
答:表的数据量很小,没必要建;经常被修改的列,建索引会影响修改速度;查询中用得少的列,建了也没用;取值范围小的列,比如性别只有男女,建索引效果不好。
问:联合索引的最左前缀原则是什么意思?
答:联合索引是多个列组合成的索引,查询的时候,只有当查询条件从索引的最左边开始,并且不跳过中间的列,索引才会被有效使用。比如联合索引(a,b,c),查询条件有a,或者a和b,或者a、b和c,索引可能生效;如果直接查b或者b和c,索引可能就不用了。
问:索引失效的情况有哪些?
答:对索引列进行函数操作或表达式计算,比如whereabs(id)=1;使用不等于(!=、)、notin、isnotnull这些操作;字符串类型的索引列查询时没加引号,导致类型转换;联合索引不满足最左前缀原则;用or连接的条件里,有的列没建索引;like查询以%开头,比如wherenamelike%张三。
问:如何查看SQL语句是否使用了索引?
答:可以用explain命令,在SQL语句前加上explain,执行后看结果里的type列,如果是const、eq_ref、ref、range、index这些,一般说明用到了索引;如果是ALL,就是全表扫描,没用到索引。还可以看key列,显示的就是实际用到的索引。
问:聚簇索引和非聚簇索引的区别?
答:聚簇索引的叶子节点存储的是完整的数据行,表数据的物理顺序和索引顺序一致,一个表只能有一个聚簇索引。非聚簇索引叶子节点存储的是索引键和指向数据行的指针,表数据的物理顺序和索引顺序没关系,一个表可以有多个非聚簇索引。查询时,聚簇索引不用回表,非聚簇索引可能需要回表查数据(覆盖索引除外)。
文档评论(0)