
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
索引是程序员在学习数据库开发架构的时候需要重点掌握的一个编程开发技术,而本文我们就通过案例分析来简单了解一下,数据库索引应用都有哪些注意事项。
1.什么是回表查询
一般情况下是:先到普通索引上定位主键值,再到聚集索引上定位行记录,它的性能较扫一遍索引树低。
具体解释:
普通索引:我们自己建的索引不管是单列索引还是联合索引,都称为普通索引,每个普通索引就对应着一颗独立的索引B+树,索引B+树的节点仅仅包含了索引里的几个字段的值以及主键值。
聚簇索引:主键索引是聚簇索引,也就是索引的叶子节点存的是整个单条记录的所有字段值。
在什么情况会出现回表操作呢?举个例子:假设表tbl有a,b,c三个字段,其中a是主键,b上建了索引。
当编写sql语句select*fromtblwherea=1;这样不会产生回表,因为所有的数据在a的索引树中均能找到;
当编写sql语句selecta,bfromtblwhereb=1;这样也不会产生回表,因为a、b数据在b的索引树中也都能找到;
但如果是select*fromtblwhereb=1;这样就会产生回表。因为where条件是b字段,那么会去b的索引树里查找数据,但b的索引里面只有a,b两个字段的值,没有c,那么这个查询为了取到c字段,就要取出主键a的值,然后去a的索引树去找c字段的数据。查了两个索引树,就出现了回表操作。
2.什么是索引覆盖?
简单说就是,索引列+主键包含select到from之间查询的列。就是索引覆盖。可以不用去进行回表操作。
3.为什么设置了命中了索引但还是造成了全表扫描
就是虽然命中了索引,但在叶子节点查询到记录后还要大量的回表,优化器认为不如直接去扫描全表。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。