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
在這里只是做記錄,項目中還沒有遇到這種需求。。。。。。。。。。。。。。。。。。。。。。。
