Atitit. 单列索引与多列索引 多个条件的查询原理与设计实现
Atitit. 单列索引与多列索引 多个条件的查询原理与设计实现
1.2. 从另一方面理解,它相当于我们创建了(firstname,lastname,age)、(firstname,lastname)以及(firstname)这些列组合上的索引。2
1. MySQL只能使用一个索引
那么,如果在firstname、lastname、age这三个列上分别创建单列索引,效果是否和创建一个firstname、lastname、 age的多列索引一样呢?答案是否定的,两者完全不同。当我们执行查询的时候,MySQL只能使用一个索引。如果你有三个单列的索引,MySQL会试图选择一个限制最严格的索引。但是,即使是限制最严格的单列索引,它的限制能力也肯定远远低于firstname、lastname、age这三个列上的多列索引。
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
1.1. 最左前缀
多列索引还有另外一个优点,它通过称为最左前缀(Leftmost Prefixing)的概念体现出来。继续考虑前面的例子,现在我们有一个firstname、lastname、age列上的多列索引,我们称这个索引为fname_lname_age。当搜索条件是以下各种列的组合时,MySQL将使用fname_lname_age索引:
* firstname,lastname,age
* firstname,lastname
* firstname
1.2. 从另一方面理解,它相当于我们创建了(firstname,lastname,age)、(firstname,lastname)以及(firstname)这些列组合上的索引。
四、
五、
2. 一条 sql 可以使用多个索引
mysql 的索引合并并不是什么新特性。早在 mysql5.0 版本就已经实现。之所以还写这篇博文,是因为好多人还一直保留着一条 sql 语句只能使用一个索引的错误观念。本文会通过一些示例来说明如何使用索引合并。
2.1. 什么是索引合并
下面我们看下 mysql 文档中对索引合并的说明:
The Index Merge method is used to retrieve rows with several range scans and to merge their results into one. The merge can produce unions, intersections, or unions-of-intersections of its underlying scans. This access method merges index scans from a single table; it does not merge scans across multiple tables.
根据官方文档中的说明,我们可以了解到:
1.
索引合并是把几个索引的范围扫描合并成一个索引。
2.
3.
索引合并的时候,会对索引进行并集,交集或者先交集再并集操作,以便合并成一个索引。
4.
5.
这些需要合并的索引只能是一个表的。不能对多表进行索引合并。
6.
2.2. 使用索引合并有啥收益
简单的说,索引合并,让一条 sql 可以使用多个索引。对这些索引取交集,并集,或者先取交集再取并集。从而减少从数据表中取数据的次数,提高查询效率。
在 explain 的 extra 字段中会以下几种:
·
Using union 索引取并集
·
·
Using sort_union 先对取出的数据按 rowid 排序,然后再取并集
·
·
Using intersect 索引取交集
·
2.3. 具体的索引合并流程
3. Referred、
多个条件的查询建立索引是几个字段建立一个索引还是还每个字段定义为一个索引_-CSDN论坛-CSDN.NET-中国最大的IT技术社区.html
MySQL 索引合并 一条 sql 可以使用多个索引-SOHU-DBA-微头条(wtoutiao.com).htm
相关文章
- MySQL索引原理及慢查询优化
- 给MongoDB添加索引
- mysql索引常见问题
- 数据库索引的实现原理(面试问题:请说出数据库索引实现原理)
- MySQL索引背后的数据结构及算法原理(转)
- [转]MySQL索引背后的数据结构及算法原理
- 四叉树空间索引原理及其实现
- 一步步分析为什么B+树适合作为索引的结构 以及索引原理 (阿里面试)
- SAP CRM索引数据库表CRMD_ORDER_INDEX的更新原理
- 【转】MySQL索引背后的数据结构及算法原理
- Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 v3 r819
- Algorithm:C++语言实现之SimHash和倒排索引算法相关(抽屉原理、倒排索、建立查找树、处理Hash冲突、Hash查找)
- Python零基础入门篇㉔〗- 字符串的索引与切片
- 面向对象——索引器
- 一句口诀教你辨别索引失效七大场景
- pymongo创建索引
- DBCC DBREINDEX重建索引提高SQL Server性能
- 数据库索引的实现原理及查询优化
- Poseidon 系统是一个日志搜索平台——认证看链接ppt,本质是索引的倒排列表和原始日志数据都存在HDFS,而文档和倒排的元数据都在NOSQL里,同时针对单个filed都使用了独立索引,使用MR来索引和搜索
- es笔记---新建es索引
- MySQL_03_MySQL索引加快查找速度的内部原理