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 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 

 

 

 

在這里只是做記錄,項目中還沒有遇到這種需求。。。。。。。。。。。。。。。。。。。。。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM