MySQL倒序索引测试1
测试环境
MySQL Community Server 8.0.17
准备测试数据
DROP TABLE TB001;
CREATE TABLE TB001(ID INT PRIMARY KEY AUTO_INCREMENT,C1 INT);
INSERT INTO TB001(C1) SELECT 1 FROM information_schema.columns LIMIT 1000; DROP TABLE TB002;
CREATE TABLE TB002(ID INT PRIMARY KEY AUTO_INCREMENT,C1 INT,C2 INT,C3 CHAR(100)); INSERT INTO TB002(C1,C2,C3)
SELECT T1.ID,T2.ID,REPEAT('您',100) FROM TB001 AS T1,TB001 AS T2 WHERE T1.ID<300 AND T2.ID<3000;
测试SQL:
SELECT *
FROM TB002
WHERE C1=20
ORDER BY C2 DESC
LIMIT 10;
使用普通索引
ALTER TABLE TB002 ADD INDEX IDX_C1_C2(C1,C2);
执行计划:
+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+---------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+---------------------+
| 1 | SIMPLE | TB002 | NULL | ref | IDX_C1_C2 | IDX_C1_C2 | 5 | const | 1000 | 100.00 | Backward index scan |
+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+---------------------+
资源消耗情况:
+--------------------------------+----------+----------+------------+--------------+---------------+-------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out | Swaps |
+--------------------------------+----------+----------+------------+--------------+---------------+-------+
| starting | 0.000048 | 0.000000 | 0.000043 | 0 | 0 | 0 |
| Executing hook on transaction | 0.000004 | 0.000000 | 0.000002 | 0 | 0 | 0 |
| starting | 0.000006 | 0.000000 | 0.000006 | 0 | 0 | 0 |
| checking permissions | 0.000005 | 0.000000 | 0.000005 | 0 | 0 | 0 |
| Opening tables | 0.000025 | 0.000000 | 0.000026 | 0 | 0 | 0 |
| init | 0.000005 | 0.000000 | 0.000004 | 0 | 0 | 0 |
| System lock | 0.000006 | 0.000000 | 0.000006 | 0 | 0 | 0 |
| optimizing | 0.000007 | 0.000000 | 0.000007 | 0 | 0 | 0 |
| statistics | 0.000042 | 0.000000 | 0.000043 | 0 | 0 | 0 |
| preparing | 0.000011 | 0.000000 | 0.000010 | 0 | 0 | 0 |
| executing | 0.000066 | 0.000000 | 0.000066 | 0 | 0 | 0 |
| end | 0.000003 | 0.000000 | 0.000002 | 0 | 0 | 0 |
| query end | 0.000003 | 0.000000 | 0.000003 | 0 | 0 | 0 |
| waiting for handler commit | 0.000006 | 0.000000 | 0.000006 | 0 | 0 | 0 |
| closing tables | 0.000004 | 0.000000 | 0.000004 | 0 | 0 | 0 |
| freeing items | 0.000008 | 0.000000 | 0.000008 | 0 | 0 | 0 |
| cleaning up | 0.000007 | 0.000000 | 0.000007 | 0 | 0 | 0 |
+--------------------------------+----------+----------+------------+--------------+---------------+-------+ 总执行时间:0.00025375
使用倒序索引
ALTER TABLE TB002 ADD INDEX IDX_C1_C2_DESC(C1,C2 DESC);
执行计划:
+----+-------------+-------+------------+------+----------------+----------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+----------------+----------------+---------+-------+------+----------+-------+
| 1 | SIMPLE | TB002 | NULL | ref | IDX_C1_C2_DESC | IDX_C1_C2_DESC | 5 | const | 1000 | 100.00 | NULL |
+----+-------------+-------+------------+------+----------------+----------------+---------+-------+------+----------+-------+
资源消耗情况:
+--------------------------------+----------+----------+------------+--------------+---------------+-------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out | Swaps |
+--------------------------------+----------+----------+------------+--------------+---------------+-------+
| starting | 0.000051 | 0.000040 | 0.000008 | 0 | 0 | 0 |
| Executing hook on transaction | 0.000004 | 0.000002 | 0.000000 | 0 | 0 | 0 |
| starting | 0.000006 | 0.000005 | 0.000001 | 0 | 0 | 0 |
| checking permissions | 0.000005 | 0.000005 | 0.000001 | 0 | 0 | 0 |
| Opening tables | 0.000026 | 0.000021 | 0.000004 | 0 | 0 | 0 |
| init | 0.000005 | 0.000004 | 0.000001 | 0 | 0 | 0 |
| System lock | 0.000006 | 0.000006 | 0.000001 | 0 | 0 | 0 |
| optimizing | 0.000008 | 0.000006 | 0.000002 | 0 | 0 | 0 |
| statistics | 0.000045 | 0.000038 | 0.000007 | 0 | 0 | 0 |
| preparing | 0.000012 | 0.000010 | 0.000002 | 0 | 0 | 0 |
| executing | 0.000071 | 0.000059 | 0.000012 | 0 | 0 | 0 |
| end | 0.000004 | 0.000004 | 0.000001 | 0 | 0 | 0 |
| query end | 0.000004 | 0.000003 | 0.000000 | 0 | 0 | 0 |
| waiting for handler commit | 0.000007 | 0.000006 | 0.000002 | 0 | 0 | 0 |
| closing tables | 0.000021 | 0.000018 | 0.000003 | 0 | 0 | 0 |
| freeing items | 0.000013 | 0.000010 | 0.000002 | 0 | 0 | 0 |
| cleaning up | 0.000009 | 0.000007 | 0.000002 | 0 | 0 | 0 |
+--------------------------------+----------+----------+------------+--------------+---------------+-------+ 总执行时间:0.00029675
总结
对于查询:
SELECT *
FROM TB002
WHERE C1=20
ORDER BY C2 DESC
LIMIT 10;
对下面的普通索引还是倒序索引,对性能影响较小。
ALTER TABLE TB002 ADD INDEX IDX_C1_C2(C1,C2);
ALTER TABLE TB002 ADD INDEX IDX_C1_C2_DESC(C1,C2 DESC);
MySQL倒序索引测试1的更多相关文章
- MySQL倒序索引测试2
测试环境 MySQL Community Server 8.0.17 准备测试数据 DROP TABLE TB001; CREATE TABLE TB001(ID INT PRIMARY KEY AU ...
- MySQL 联合索引测试2
接上一篇文章: http://www.cnblogs.com/xiaoit/p/4430300.html 1:首先删掉上一篇建立的索引,重新建立一个. mysql> DROP INDEX idx ...
- MySQL 联合索引测试
搭建测试环境 1:创建表 CREATE TABLE tab_index (id int(5), age int(3), dte datetime); 2:插入测试数据 INSERT INTO tab_ ...
- MySQL 联合索引测试3
接上一篇文章: http://www.cnblogs.com/xiaoit/p/4430387.html 有时候会出现某字段建立一个索引,但是查看执行计划的时候发现还是全扫了表? 可以强制走下索引看看 ...
- (译)MySQL 8.0实验室---MySQL中的倒序索引(Descending Indexes)
译者注:MySQL 8.0之前,不管是否指定索引建的排序方式,都会忽略创建索引时候指定的排序方式(语法上不会报错),最终都会创建为ASC方式的索引,在执行查询的时候,只存在forwarded(正向)方 ...
- Mysql使用Java UUID作为唯一值时使用前缀索引测试
Mysql可以使用字符串前缀 作为索引 以节约空间. 下面我们以 Java的UUID 生成的 32位(移除UUID中的 中划线)字符串 来做一下 测试. 表结构: CREATE TABLE `test ...
- MySQL(3)-索引
一.索引类型 在MySQL中,存储引擎使用索引,首先在索引中找到对应值,然后根据匹配的索引记录中找到对应的行. 无论是多么复杂的ORM工具,在精妙和复杂的索引面前都是"浮云".这里 ...
- mysql高性能索引策略
转载说明:http://www.nyankosama.com/2014/12/19/high-performance-index/ 1. 引言 随着互联网时代地到来,各种各样的基于互联网的应用和服务进 ...
- SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引
我们都知道在一个表中当需要2列以上才能确定记录的唯一性的时候,就需要用到联合主键,当建立联合主键以后,在查询数据的时候性能就会有很大的提升,不过并不是对联合主键的任何列单独查询的时候性能都会提升,但我 ...
随机推荐
- restql 学习一 安装试用
restql 提供了manager 可以方便配置restql 的资源,同时也提供了一个docker-compose 运行环境 以下是一个安装使用 环境准备 docker-compose 文件 ve ...
- django @login_required登录限制(2)-返回登陆成功后的页面
本次要实现的功能是,访问未登录的视图函数,需要先跳转到登录页面,登陆成功在跳转回来. 之前在网上找了很多资料,都没有找到解决方案. 跳转到登录页面很好弄,就是登陆成功跳转回来出了问题,原因是登录后的p ...
- [考试]NOIP2015模拟题2
// 此博文为迁移而来,写于2015年7月22日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w72i.html 1.总 ...
- 回溯法 | 旅行商问题(TSP问题)
学习链接: 回溯法解旅行商问题(TSP).贪心算法:旅行商问题(TSP) 今天早上做了无数个梦,然后被紧紧地吸附在床上.挣扎一番后爬起来,已经是9点了.然后我开始研究旅行商问题. 在一个无向图中找到一 ...
- PATA1082Read Number in Chinese
有几点需要注意的地方一是将right转化为与left在在同一节 while (left + 4 <= right) { right -= 4;//每次将right移动4位,直到left与righ ...
- CentOS 7.6 安装Python3.7.2 多版本共存
CentOS 7.6 默认安装了 Python 2.7.5 准备环境 yum install git gcc gcc-c++ make automake autoconf libtool pcre p ...
- linux阿里云服务器更换镜像的方法
linux阿里云服务器更换镜像的方法 1 先进入硬盘创建快照 生成自定义镜像 ps:他可以在阿里云各个服务器上共享 再左侧镜像 点击去可以看到共享 直接进ecs 关闭服务器 重新初始化硬盘 然后主界面 ...
- Windows设置国内源阿里云镜像加速与离线安装pip包的方法
Windows设置国内源阿里云镜像加速1.先在 windows “文件资源管理器” 地址栏 输入 %APPDATA% 按回车,打开程序自定义设置文件夹然后,创建名为 pip 的文件夹,用于存放 pip ...
- PyInstaller把Python脚本打包成可执行程序教程
一.说明 一直以来都有把.py文件打包成.exe文件的想法,但总是不够强烈,每次拖着拖着就淡忘了. 昨天帮硬件部门的同事写了个脚本,然后今天下午的时候,他问有没有办法把脚本打包成可执行文件,这样方便以 ...
- 如何从0搭建node服务
第一步 首先要搭一个node服务 基于 express 来快速构建node服务 npm install express 安装express 新建一个项目 myapp npm install expre ...