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 USER\G
*************************** 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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql