数据库查询索引(sql单个索引和复合索引)
数据库查询索引(sql单个索引和复合索引)http://www.bieryun.com/3380.html
当一条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查找。
数据库查询索引(sql单个索引和复合索引)相关推荐
- 数据库查询语句SQL中like、%、-的区别
数据库查询语句SQL中like.%.-的区别 数据库查询语句SQL中like.%.-的区别 %百分号通配符:表示任何字符出现任意次数(可以是0次) SQL 语句选取 name 以字母 "k& ...
- Pandas把dataframe的索引、复合索引变换为数据列:包含单索引到单列(重命名)、复合索引到多数据列、复合索引的其中一个水平变换为数据列、
Pandas把dataframe的索引.复合索引变换为数据列:包含单索引到单列(重命名).复合索引到多数据列.复合索引的其中一个水平变换为数据列 目录
- Python之pandas:对dataframe数据的索引简介、应用大全(输出索引/重命名索引列/字段去重/设置复合索引/根据列名获取对应索引)、指定某字段为索引列等详细攻略
Python之pandas:对dataframe数据的输出索引.重命名索引列/字段去重/设置复合索引/根据列名获取对应索引.指定某字段为索引列等详细攻略 目录 对pandas中dataframe数据中 ...
- mysql 去掉复合索引_MySQL性能优化[实践篇]-复合索引实例
上篇文章最后提了个问题 假设某个表有一个**复合索引(c1,c2,c3,c4)**,问以下查询中只能使用该复合索引的c1,c2,c3部分的有那些 1. where c1=x and c2=x and ...
- oracle复合索引的使用方法,ORACLE复合索引使用 注意事项
复合索引的第一列一定要出现在WHERE子句中. 一.like "%_" 百分号在前. 二.WHERE中单独引用复合索引里第一位置的索引列,并且SELECT.GROUP BY等子句中 ...
- mysql复合索引的应用场景_mysql复合索引(联合索引)的使用场景
什么是联合索引? 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支 ...
- oracle alter增加索引,sql – Oracle alter index允许索引空值
你现在至少有四种选择: >创建"常量表达式"索引- create index half_null_col_idx on huge_table (half_null_col, ...
- oracle查询两列合并成一列_MySQL复合索引和单列索引的单表查询分析
本文由读者小平同志投稿,小平是一位非常朴实认真的猿,现于某上市证券公司做微服务开发,对 MySQL 优化有深入研究,小平的博客地址是https://blog.csdn.net/weixin_41193 ...
- oracle复合索引介绍(多字段索引)
首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在该表中 ...
最新文章
- Redis进阶-Redis安全相关操作
- 软件工程软件开发成本度量规范_软件开发成本度量方法
- python对文件进行读写操作
- QT - 内存泄漏检测
- 实用的编程网站—良好的开端
- Win11系统怎样设置更改密码
- PostgreSQL数据库配置网络访问
- setTimeout(〒︿〒) 请原谅我一直以来对你的忽视
- java文件写入blob_java程序向IQ写入blob(image)类型数据问题的解决
- Pr 视频效果:颜色校正
- 硬盘整数大小分区问题
- 学习opencv3 pdf_PDF的虚拟打印机,免费又好用
- 分享27个高质量前端大佬的油管频道(上)
- PWM控制电机转速、PWM原理
- 实验四:继承性和派生类 建一个楼房Building为基类,建立住宅类House继承Building,存储房号和面积,建立办公室类Office继承Building,存储办公室名称和电话
- MATLAB冒号表达式
- 专访马云:下一个星辰大海是百货商店
- 考研复试英语自我介绍模版
- html5 a4页面,如何在A4纸张尺寸页面制作HTML页面?
- 外星人装Ubuntu18.04