zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    antd pro2.0 使用记录五:设置代理
    antd pro2.0 使用记录四:右侧顶部菜单栏+新建页面
    antd pro2.0 使用记录三:多个接口调用问题
    antd pro2.0 记录二:登录/注册页面逻辑,调用后台
    实用的Portraiture滤镜磨皮教程
    mysql 远程访问权限
    vc6.0运用mysql数据库中的编码所导致的乱码问题(接收和输出的编码必须要一致)
    飞思卡尔imx6开发板Linux下GPIO驱动
    beagleBone black 中QT的移植
    Beaglebone Black从零开始系列教程大汇总!
  • 原文地址:https://www.cnblogs.com/gaogao67/p/11608299.html
Copyright © 2011-2022 走看看