MySQL之联合索引
以 index(a, b, c) 为例:
语句 | 发挥作用的索引 | 记忆方法(以三块板子过河记忆, 顺序很重要) |
WHERE a=3 | 只用到了a列 | 只走了a板子 |
WHERE a=3 AND b=5 | 使用了a、b列 | 只走了ab两块板子 |
WHERE a=3 AND b=4 AND c=5(不论顺序) | 使用了a、b、c列 | 走了所有的板子 |
WHERE b=4 AND c=5 或 WHERE b=4 | 否 | 因为a板子没走,所以衔接不上b和c板子 |
WHERE a=3 AND c=5 | 用到a,没用到c | 只走了a,b没走就衔接不上c |
WHERE a=3 AND b>10 AND c=7 | 用到了a、b列 | 走完了a,b走了一半,与c衔接不上了 |
WHERE a=3 AND b LIKE '***%' AND c=7 | 用到了a、blie | 走完了a,b走了前一半,与c衔接不上了 |
WHERE a=3 AND b LIKE '%***' AND c=7 | 只用到了a列 | 走完了a,b走了后一半,但b前半段与a衔接不上了,走也是白走 |
WHERE a=3 AND c>10 AND b=4 | 用到了a、b、c列 | 走完了a和b,c只走了一半 |
注意:1)例子里都是 WHERE 语句,但 ORDER BY/GROUP BY 等都会用到索引,分析与上面一样
2)MySQL会一直向右匹配,直到查询中遇到范围查询(<、>、between、like)等就停止匹配
3)具体分析用explain语句,详细参见http://www.zixue.it/thread-9218-1-1.html
一道面试题:
有商品表,商品id列goods_id,栏目列cat_id,价格列price。
问题:已在价格列上添加索引,但按价格查询还是很慢,为什么?怎么解决?
答:在实际场景中,一个电商网站的商品很多,用户很少上来就按价格查询,一般会进到分类或品牌下再进行查询。
解决方法:去掉单独的price列的索引,增加(cat_id,price)复合索引。
如果根据日志统计发现许多人按照品牌来查询,也可以改为(cat_id,brand_id,price)复合索引
MySQL之联合索引的更多相关文章
- Mysql 创建联合索引注意事项
当一个表有多条索引可走时, Mysql 根据查询语句的成本来选择走哪条索引, 联合索引的话, 它往往计算的是第一个字段(最左边那个), 这样往往会走错索引. 如: 索引Index_1(Crea ...
- Mysql中联合索引的最左匹配原则
在Mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先. 如果我们建立了一个2列的联合索引(col1,col2),实际上已经建立了两个联合索引(col1).(col1,col2); 如果有一 ...
- 一个案例彻底弄懂如何正确使用 mysql inndb 联合索引
有一个业务是查询最新审核的5条数据 SELECT `id`, `title` FROM `th_content` WHERE `audit_time` < 1541984478 AND `sta ...
- mysql的联合索引的误解
https://www.zhihu.com/question/36996520 之前对于联合索引有一个误区, 假设 name,age为一个联合索引 5条索引记录 a 10 b 5 c 12 c 15 ...
- Mysql中联合索引的最左匹配原则(百度)
创建联合索引时列的选择原则 经常用的列优先(最左匹配原则) 离散度高的列优先(离散度高原则) 宽度小的列优先(最少空间原则) 在Mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先.如果我们 ...
- mysql使用联合索引提示字符长度超限制解决办法
mysql在创建数据库的时候,字符集设置的不是utf8而是utf9mb4,在导入sql脚本的时候,发现提示如下错误: 从上图中,我们可以看出,使用的是innodb及字符集.错误提示是长度太长了 ...
- mysql选择联合索引还是单索引?索引列应该使用哪一个最有效?深入測试探讨
先建表 CREATE TABLE `menu_employee` ( `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键,无实际意义', `emplo ...
- MySQL联合索引运用-最左匹配原则
前言 之前看了很多关于MySQL索引的文章也看了<高性能MySQL>这本书,自以为熟悉了MySQL索引使用原理,入职面试时和面试官交流,发现对复合索引的使用有些理解偏颇,发现自己的不足整理 ...
- MySQL 联合索引详解
MySQL 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c ...
随机推荐
- https nginx配置
cd /saas/conf/nginx/ mkdir key cd key 创建key: openssl req -nodes -newkey rsa:2048 -keyout server.key ...
- linux 第三周
linux内核目录结构 arch目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录.PC机一 ...
- Ubuntu 12.10 用wubi安装到硬盘中
wubi安装的优势: ubuntu可以像安装软件一样方便的安装.删除,不影响物理机的原有系统 这种方式安装的ubuntu不用担心功能会有所缺失,ubuntu所有的功能都在 和安装了双系统一样,没有什么 ...
- 【纯代码】Swift - 自定义底部弹窗基类(可根据需要自行扩展内容)
//弹窗视图 class PopView : UIView { var selectButtonCallBack:((_ title:String)-> Void)? var contenVie ...
- 【读书笔记】《深入浅出nodejs》第二章 模块机制
1.什么是模块? 指在程序设计中,为完成某一功能所需的一段程序或子程序:或指能由编译程序.装配程序等处理的独立程序单位:或指大型软件系统的一部分. ----<百度百科> 2.JavaScr ...
- 【bzoj5177】[Jsoi2013]贪心的导游(分块)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5177 在网上看到的题解基本都是用主席树,也就是带点骚操作的暴力直接艹过去的.这里分享一 ...
- kotlin 记录(已弃坑)
kotlin 有些是转载内容 使用nullable值以及空值检测 引用或函数返回值如果可能为null值,则必须显式标记nullable. (在类型后面跟一个问号表示这个对象可能为空,跟两个感叹号表示这 ...
- Spring Cloud 坑点
1 配置中心 1.config 默认Git加载 通过spring.cloud.config.server.git.uri指定配置信息存储的git地址,比如:https://github.com/spr ...
- UVa 11768 格点判定(扩展欧几里得求线段整点)
https://vjudge.net/problem/UVA-11768 题意: 给定两个点A(x1,y1)和B(x2,y2),均为0.1的整数倍.统计选段AB穿过多少个整点. 思路: 做了这道题之后 ...
- bzoj 1270: [BeijingWc2008]雷涛的小猫 简单dp+滚动数组
1270: [BeijingWc2008]雷涛的小猫 Time Limit: 50 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Descrip ...