• MySQL实现强制查询走索引和强制查询不缓存


    0.表结构如下:(包含两个索引)

    Create Table: CREATE TABLE `user` (
      `userID` varchar(40) NOT NULL,
      `userCode` varchar(20) DEFAULT NULL,
      `userName` varchar(25) DEFAULT NULL,
      `password` varchar(20) DEFAULT NULL,
      `userSort` varchar(30) DEFAULT NULL,
      `userStuTeaNum` varchar(50) DEFAULT NULL,
      `userUnitName` varchar(30) DEFAULT NULL,
      `userUnitNum` varchar(30) DEFAULT NULL,
      `isUse` varchar(2) DEFAULT NULL,
      `remark1` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`userID`),
      UNIQUE KEY `userCodeIndex` (`userCode`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    前提是会使用explain分析SQL语句:

    2.强制走索引

    (1)直接查询使用的是userCodeIndex

    mysql> EXPLAIN SELECT userID FROM USERG
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: USER
       partitions: NULL
             type: index
    possible_keys: NULL
              key: userCodeIndex
          key_len: 63
              ref: NULL
             rows: 3
         filtered: 100.00
            Extra: Using index
    1 row in set, 1 warning (0.00 sec)

    (2)强制使用主键索引

    语法:

    SELECT userID FROM USER FORCE INDEX(PRIMARY);

    注意:INDEX(indexName)里面的参数是index的名称,而不是列名,如果不知道index名称可以通过下列方式查询:

    mysql> show index from tblname;
    
    mysql> show keys from tblname;

    顺便说一句:key和index的区别:key有两个作用,一是约束字段,二是辅助查询(具备constraint和index的意义)

                    index只是辅助查询,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。

    例如:强制使用userCodeIndex

    mysql> EXPLAIN SELECT userID FROM USER FORCE INDEX(PRIMARY)G
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: USER
       partitions: NULL
             type: index
    possible_keys: NULL
              key: PRIMARY
          key_len: 122
              ref: NULL
             rows: 3
         filtered: 100.00
            Extra: Using index
    1 row in set, 1 warning (0.00 sec)

    3.强制不走缓存

    SELECT  SQL_NO_CACHE  * FROM USER 

    在这里只是做记录,项目中还没有遇到这种需求。。。。。。。。。。。。。。。。。。。。。。。

  • 相关阅读:
    Netty源码分析第4章(pipeline)---->第5节: 传播outbound事件
    Netty源码分析第4章(pipeline)---->第4节: 传播inbound事件
    Google地图路线规划
    bootstrap Table 中给某一特定值设置table选中
    枚举类型定义
    日期格式转换 java 2016-09-03T00:00:00.000+08:00
    String字符串针对常量池的优化
    【转】MySQL性能优化的最佳21条经验
    【转】 jquery遍历json数组方法
    如何设置tomcat定时自动重启
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/9194483.html
Copyright © 2020-2023  润新知