博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库查询索引(sql单个索引和复合索引)
阅读量:6829 次
发布时间:2019-06-26

本文共 930 字,大约阅读时间需要 3 分钟。

数据库查询索引(sql单个索引和复合索引)

当一条sql语句的查询涉及到多个字段,这个时候给每个字段加索引,数据库也只能够使用其中的一个索引,这个时候使用复合索引就比较好了。这是为什么呢?

这是因为:全表扫描/只使用一个索引的速度比起来,去分析两个索引二叉树更加耗费时间,所以绝大多数情况下数据库都是是用一个索引。

如这条语句:

select count(1) from table1 where column1 = 1 and column2 = ‘foo’ and column3 = ‘bar’

我们来想象一下当数据库有N个索引并且查询中分别都要用上他们的情况:
查询优化器(用大白话说就是生成执行计划的那个东西)需要进行N次主二叉树查找[这里主二叉树的意思是最外层的索引节点],此处的查找流程大概如下:
查出第一条column1主二叉树等于1的值,然后去第二条column2主二叉树查出foo的值并且当前行的coumn1必须等于1,最后去column主二叉树查找bar的值并且column1必须等于1和column2必须等于foo。
如果这样的流程被查询优化器执行一遍,就算不死也半条命了,查询优化器可等不及把以上计划都执行一遍,贪婪算法(最近邻居算法)可不允许这种情况的发生,所以当遇到以下语句的时候,数据库只要用到第一个筛选列的索引(column1),就会直接去进行表扫描了。

select count(1) from table1 where column1 = 1 and column2 = ‘foo’ and column3 = ‘bar’

所以与其说是数据库只支持一条查询语句只使用一个索引,倒不如说N条独立索引同时在一条语句使用的消耗比只使用一个索引还要慢。

所以如上条的情况,最佳推荐是使用index(column1,column2,column3) 这种联合索引,此联合索引可以把b+tree结构的优势发挥得淋漓尽致:
一条主二叉树(column=1),查询到column=1节点后基于当前节点进行二级二叉树column2=foo的查询,在二级二叉树查询到column2=foo后,去三级二叉树column3=bar查找。

原文地址

转载地址:http://srykl.baihongyu.com/

你可能感兴趣的文章
看了这个,你还敢用分身版微信刷步吗?
查看>>
100V/60Hz,三相200V/60Hz 变频电源的标准电压频率是叫什么?
查看>>
CNN初探
查看>>
在线思维导图工具
查看>>
T-MBA·活动报道 | 第三期第四课:卓越演讲影响力-合适的地点说恰当的话
查看>>
Google官方架构MVP解析与实战进阶必学系列
查看>>
吐槽java时间那点事儿 Joda Time
查看>>
体验JBOOT(一)-- Hello, Jboot
查看>>
ubuntu 安装 mongodb
查看>>
JAVA多线程和并发基础面试问答
查看>>
通过Unison实现文件的双向同步
查看>>
nodeJS监控任务完成并通知
查看>>
Hessian学习—Hessian入门
查看>>
QML学习笔记-介绍篇(1)
查看>>
gcc 的原子操作实现自旋锁
查看>>
Socket详解(记录一)
查看>>
Oracle 分析函数
查看>>
SpringBoot基础教程1.1.1 项目搭建
查看>>
Jenkins打包记录导至服务磁盘空间不够
查看>>
设计模式C++实现(2)——策略模式
查看>>