博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL索引笔记
阅读量:6278 次
发布时间:2019-06-22

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

1、 复合索引的建立以及最左前缀原则

假设你在表的state、city和zip数据列上建立了复合索引。索引中的数据行按照state/city/zip次序排列,因此它们也会自动地按照state/city和state次序排列。这意味着,即使你在查询中只指定了state值,或者指定state和city值,MySQL也可以使用这个索引。因此,这个索引可以被用于搜索如下所示的数据列组合:state, city, zipstate, citystateMySQL不能利用这个索引来搜索~没有包含在最左前缀的内容~。例如,如果你按照city或zip来搜索,就不会使用到这个索引。如果你搜索给定的state和具体的ZIP代码(索引的1和3列),该索引也是不能用于这种组合值的,尽管MySQL可以利用索引来查找匹配的state从而缩小搜索的范围。如果你考虑给已经索引过的表添加索引,那么就要考虑你将增加的索引是否是已有的多列索引的最左前缀。如果是这样的,不用增加索引,因为已经有了(例如,如果你在state、city和zip上建立了索引,那么没有必要再增加state的索引)。复制代码

2、order by的字段必须放在索引的最后面

假设表persons有如下信息段

CREATE TABLE `persons` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `uuid` varchar(60) NOT NULL COMMENT 'uuid',  `unitcode` varchar(30) NOT NULL COMMENT '单位编码',  `code1` varchar(36) DEFAULT NULL COMMENT '员工号/编码',  `name1` varchar(50) DEFAULT NULL COMMENT '姓名',  /*   * ...   */  `s_date` date DEFAULT NULL COMMENT '员工档案建档日期',  `logout` smallint(6) DEFAULT NULL COMMENT '在职状态',  /*   * ...   */  `deleted_at` timestamp NULL DEFAULT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `persons_uuid_unique` (`uuid`),  KEY `persons_name1_unitcode_index` (`name1`,`unitcode`),  /*   * ...   */  KEY `persons_name1_unitcode_logout_deleted_at_index` (`name1`, `unitcode`,`logout`,`deleted_at`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=34199 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;复制代码

有如下查询语句

-- sql1desc select * from `persons` where `unitcode` like '000%' and `logout` = '0' and `persons`.`deleted_at` is null order by `name1`  limit 15 offset 0-- sql2desc select `unitcode`, `name1` from `persons` where `unitcode` like '000%' and `logout` = '0' and `persons`.`deleted_at` is null order by `name1`  limit 15 offset 0复制代码
  1. 上面的sql1中不会用到索引, sql2中才用到索引
  2. 要使sql1中用到索引必须将sql查询语句where中没有出现,只是在order by中出现的列名放到索引的最后面,将 索引persons_name1_unitcode_logout_deleted_at_index改为以下即可。
/* * ... */KEY `persons_name1_unitcode_logout_deleted_at_index` (`unitcode`,`logout`,`deleted_at`, `name1`) USING BTREE复制代码

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

你可能感兴趣的文章
select、poll、epoll之间的区别总结[整理]【转】
查看>>
CSS基础知识(上)
查看>>
PHP中常见的面试题2(附答案)
查看>>
26.Azure备份服务器(下)
查看>>
mybatis学习
查看>>
LCD的接口类型详解
查看>>
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
poi 导入导出的api说明(大全)
查看>>
Mono for Android 优势与劣势
查看>>
将图片转成base64字符串并在JSP页面显示的Java代码
查看>>
js 面试题
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
腾讯云下安装 nodejs + 实现 Nginx 反向代理
查看>>
Javascript 中的 Array 操作
查看>>
java中包容易出现的错误及权限问题
查看>>
AngularJS之初级Route【一】(六)
查看>>
服务器硬件问题整理的一点总结
查看>>
SAP S/4HANA Cloud: Revolutionizing the Next Generation of Cloud ERP
查看>>
Mellanox公司计划利用系统芯片提升存储产品速度
查看>>
白帽子守护网络安全,高薪酬成大学生就业首选!
查看>>