测试环境

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的更多相关文章

  1. MySQL倒序索引测试2

    测试环境 MySQL Community Server 8.0.17 准备测试数据 DROP TABLE TB001; CREATE TABLE TB001(ID INT PRIMARY KEY AU ...

  2. MySQL 联合索引测试2

    接上一篇文章: http://www.cnblogs.com/xiaoit/p/4430300.html 1:首先删掉上一篇建立的索引,重新建立一个. mysql> DROP INDEX idx ...

  3. MySQL 联合索引测试

    搭建测试环境 1:创建表 CREATE TABLE tab_index (id int(5), age int(3), dte datetime); 2:插入测试数据 INSERT INTO tab_ ...

  4. MySQL 联合索引测试3

    接上一篇文章: http://www.cnblogs.com/xiaoit/p/4430387.html 有时候会出现某字段建立一个索引,但是查看执行计划的时候发现还是全扫了表? 可以强制走下索引看看 ...

  5. (译)MySQL 8.0实验室---MySQL中的倒序索引(Descending Indexes)

    译者注:MySQL 8.0之前,不管是否指定索引建的排序方式,都会忽略创建索引时候指定的排序方式(语法上不会报错),最终都会创建为ASC方式的索引,在执行查询的时候,只存在forwarded(正向)方 ...

  6. Mysql使用Java UUID作为唯一值时使用前缀索引测试

    Mysql可以使用字符串前缀 作为索引 以节约空间. 下面我们以 Java的UUID 生成的 32位(移除UUID中的 中划线)字符串 来做一下 测试. 表结构: CREATE TABLE `test ...

  7. MySQL(3)-索引

    一.索引类型 在MySQL中,存储引擎使用索引,首先在索引中找到对应值,然后根据匹配的索引记录中找到对应的行. 无论是多么复杂的ORM工具,在精妙和复杂的索引面前都是"浮云".这里 ...

  8. mysql高性能索引策略

    转载说明:http://www.nyankosama.com/2014/12/19/high-performance-index/ 1. 引言 随着互联网时代地到来,各种各样的基于互联网的应用和服务进 ...

  9. SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引

    我们都知道在一个表中当需要2列以上才能确定记录的唯一性的时候,就需要用到联合主键,当建立联合主键以后,在查询数据的时候性能就会有很大的提升,不过并不是对联合主键的任何列单独查询的时候性能都会提升,但我 ...

随机推荐

  1. 4-OpenResty 配置 https 访问

    首先是下载证书  https://www.cnblogs.com/yangfengwu/p/11809757.html 因为咱用的 Nginx 所以 修改这个 server { listen ssl; ...

  2. GDAL在VS下配置测试

    刚才在VS2013里面配置了一下GDAL,然后就测试了配置成功与否.熟料,竟然发现在微软的Visual Studio 2013版本中,调用MessageBox()这个函数的时候报错了. 错误信息如下 ...

  3. Spring 事物隔离级别,事物传播行为

    Spring 框架中对于事物的管理,主要定义了一下四种属性: 事物的隔离(Isolation)级别 事物的传播行为(Propagation Behavior) 事物的超时时间(TImeout) 是否为 ...

  4. Centos目录及其常用处理命令

    1.Centos之常见目录作用介绍[1] 我们先切换到系统根目录 / 看看根目录下有哪些目录 [root@localhost ~]# cd / [root@localhost /]# ls bin   ...

  5. 在centos系统的/etc/hosts添加了 当前主机的 ‘ NAT分配的IP controller’,RabbitMQ添加用户报错。

    在centos系统的/etc/hosts添加了 当前主机的 ' NAT分配的IP controller',RabbitMQ添加用户报错. rabbitMq添加用户 报错信息如下 [root@contr ...

  6. “/usr/local/lib/libosipparser2.so.7: could not read symbols: Invalid operation” 异常解决

    编译c代码报错如下 /usr/bin/ld: /tmp/ccl8nBND.o: undefined reference to symbol 'osip_message_get_body' /usr/b ...

  7. Linux中文件权限查看和修改

    权限定义 linux文件权限分为:r读权限(4).w写权限(2).x执行权限(1) linux权限对象分为:拥有者.组用户.其他用户 权限修改: chown user:group /usr/local ...

  8. putty常用配置修改

    1.修改putty默认的颜色方案 初次使用putty时,发现默认的配色的方案看得非常难受,特别是黑色背景,深蓝色的字体,根本看不清楚,下面介绍如何更改默认的配色方案: (1)下载配置文件 首先下载注册 ...

  9. JMeter扩展插件实现对自定义协议进行支持 转

    本文版权归xmeter.net 所有.欢迎转载,转载请注明出处. 摘要## JMeter本身提供了插件机制,允许第三方扩展JMeter以支持JMeter不支持的协议的测试.本文以扩展一个简单的Apac ...

  10. 用LabVIEW实现《家国梦》游戏中自动收货收金币

    前几周,很流行一个手机游戏,叫<家国梦>.我在手机上玩了一两天后,发现了两个问题: 1. 收货收金币太没意思,只需要手指滑在固定的路线,一会儿就烦了 2. 怎么追赶也追不上手快的人(当然也 ...