这两天看《构建高性能Web站点》这本书,感觉写的真是不错,很多实际项目中会碰到的问题都有所提及,今天看到一个最左前缀原则,以前也听说过,不过一直没搞明白,今天查了下。
通过实例理解单列索引、多列索引以及最左前缀原则
实例:现在我们想查出满足以下条件的用户id:
mysql>SELECT `uid` FROM people WHERE lname`='Liu' AND `fname`='Zhiqun' AND `age`=26
因为我们不想扫描整表,故考虑用索引。
单列索引:
ALTER TABLE people ADD INDEX lname (lname);
将lname列建索引,这样就把范围限制在lname='Liu'的结果集1上,之后扫描结果集1,产生满足fname='Zhiqun'的结果集2,再扫描结果集2,找到 age=26的结果集3,即最终结果。
由 于建立了lname列的索引,与执行表的完全扫描相比,效率提高了很多,但我们要求扫描的记录数量仍旧远远超过了实际所需 要的。虽然我们可以删除lname列上的索引,再创建fname或者age 列的索引,但是,不论在哪个列上创建索引搜索效率仍旧相似。
2.多列索引:
ALTER TABLE people ADD INDEX lname_fname_age (lame,fname,age);
为了提高搜索效率,我们需要考虑运用多列索引,由于索引文件以B-Tree格式保存,所以我们不用扫描任何记录,即可得到最终结果。
注:在mysql中执行查询时,只能使用一个索引,如果我们在lname,fname,age上分别建索引,执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。
3.最左前缀:顾名思义,就是最左优先,上例中我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。
注:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。
分享到:
相关推荐
计算机后端-PHP视频教程. mysql优化引 左前缀原则.wmv
1.谈谈你对 SQL 注入式攻击的理解? 2.幻读是什么,用什么隔离级别可以防止幻读?...6.什么是最左前缀原则?什么是最左匹配原则? 7.什么是临时表,何时删除临时表? 8.使用 union 和 union all 时需要注意些什么?
JAVA面试题MySQL索引原理及索引优化校招面试找工作笔试 目录: 基本概念 MySQL索引结构的分类 Hash索引、B+树索引、全文索引、RTree索引。 B+树索引 B+树介绍,为什么选择B+树,...最左前缀原则 Hash索引 介绍、特点。
联合索引:索引列有多个字段,使用时需要满足最左前缀原则 普通索引 这是最基本的索引,它没有任何限制。它有以下几种创建方式: 1.创建索引 代码如下: CREATE INDEX indexName ON mytable(username(length)); ...
6、最左前缀原则是什么? 7、如何处理 MySQL 数据库的 CPU 飙升? 8、什么是视图(View)?视图有哪些特点? 9、请介绍一下 MySQL 中的 ACID 属性是什么? 10、请介绍一下 MySQL 中的存储引擎(Storage Engine)以及...
包括常见的面试题和答案 一、数据库基础知识 ...8、什么是最左前缀原则?什么是最左匹配原则 9、数据库为什么使用B+树而不是B树 10、非聚簇索引一定会回表查询吗? 11、有哪些情况, 索引会失效, 可以简单说说吗?
之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和面试官交流,发现遗漏了些东西,这里自己整理一下这方面的内容。 什么时候创建组合索引? 当我们的where查询存在多个...
数据结构维度 oB+树索引:所有数据存储在...o联合索引:多个字段创建的索引,使用时遵循最左前缀原则。 o唯一索引:索引列中的值必须是唯一的,但是允许为空值。 空间索引:MySQL5.7之后支持空间索引,在空间索引这方面
14. 谈谈你对最左前缀原则的理解? 15. 怎么知道创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因? 16. 什么情况下索引会失效?即查询不走索引? 17. 查询性能的优化方法? 18. InnoDB 和 ...
在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,示例: 对列col1、列col2和列col3建一个联合索引 KEY test_col1_col2_col3 on test(col1,col2,col3); 联合...
用户历史订单列表查询rowkey设计技巧 最左前缀原则
一、面试官考点之索引是什么? 二、索引有哪些类型类型 三、面试官考点之为什么选择B+树作为索引结构 四、面试官考点之一次B+树索引搜索过程 ...七、面试官考点联合索引之最左前缀原则 八、面试官考点之索引下推
最左前缀原则8. 索引的使用注意事项1. 索引的创建2. 注意点 索引 1. 什么是索引? 索引是数据库存储引擎用于快速找到记录的一种数据结构。 2. 为什么要使用索引,索引的优缺点? 1. 优点 大大减少服务器需要扫描...
二叉树聊一聊InnoDB的索引模型(B+树)索引的维护(《新华字典》的目录修改)SQL索引执行过程–回表索引创建技巧–索引覆盖索引创建技巧—最左前缀原则索引下推小结引用交个朋友好吗? 索引的基础理解 索引是数据库...
1. 什么是最左前缀原则? 以下回答全部是基于MySQL的InnoDB引擎 例如对于下面这一张表 如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下 如果我们要进行模糊查找,查找name 以“张”...
leetcode下载 interview Python 类变量 静态变量 实例变量区别 ...最左前缀原则 大文本查询为什么回慢 行溢出 redis redis 支持哪些数据类型 zset 底层数据结构是什么,为什么这么设计 redis支持事
中缀式的计算按运算符的优先级及括号优先的原则,相同级别从左到右进行计算。表达式还有后缀式(如:22 7 4 - * 3 / 11+)和前缀式(如:+ 11 / 22 - 7 4 3)。后缀表达式和前缀表达式中没有括号吗,给计算带来方便...
主要讨论MySQL选择索引时单列单列索引和多列索引使用,以及多列索引的最左前缀原则,需要的朋友可以参考下
1、最左前缀匹配原则 2、=和in可以乱序 3、尽量选择区分度⾼的列作为索引 4、索引列不能参与计算,保持列“⼲净” 5、尽量的扩展索引,不要新建索引 6、注意关联字段类型一致 10、查询优化神器 ‒ explain命令...
对列col1、列col2和列col3建一个联合索引 联合索引 test_col1_col2_col3 实际建立了(col1)、(col1,col2)、(col,col2,col3...上面这个查询语句执行时会依照最左前缀匹配原则,检索时会使用索引(col1,col2)进行数据匹配。