多餘索引導致explain錯誤
# 環境
mysql> use test
Database changed
mysql> select version();
+------------+
| version() |
+------------+
| 5.5.37-log |
+------------+
1 row in set (0.04 sec)
# 表結構
mysql> show create table tb\G;
*************************** 1. row ***************************
Table: tb
Create Table: CREATE TABLE `tb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`age` int(11) DEFAULT NULL,
`c1` int(11) DEFAULT NULL COMMENT 'aaa',
`c2` varchar(20) DEFAULT NULL,
`t1` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=133012 DEFAULT CHARSET=utf8 COMMENT='aa'
1 row in set (0.02 sec)
# 資料分佈
mysql> SELECT age,COUNT(*) FROM tb GROUP BY age WITH ROLLUP;
+------+----------+
| age | COUNT(*) |
+------+----------+
| -1 | 129484 |
| 2 | 100 |
| NULL | 129584 |
+------+----------+
3 rows in set (0.11 sec)
# select 語句
# SELECT id,age FROM tb WHERE age='-1' AND id>324 ORDER BY id LIMIT 100
##################################################### 正常索引:idx_ageidc2(age,id,c2)
mysql> ALTER TABLE tb ADD INDEX idx_ageidc2(age,id,c2);
Query OK, 0 rows affected (0.75 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> EXPLAIN SELECT id,age FROM tb WHERE age='-1' AND id>324 ORDER BY id LIMIT 100\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tb
type: ref
possible_keys: PRIMARY,idx_ageidc2
key: idx_ageidc2
key_len: 5
ref: const
rows: 64912
Extra: Using where; Using index
1 row in set (0.00 sec)
##################################################### 額外索引:idx_agec2(age,c2),導致explain走主鍵,而不走index
mysql> ALTER TABLE tb ADD INDEX idx_agec2(age,c2);
Query OK, 0 rows affected (0.96 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> EXPLAIN SELECT id,age FROM tb WHERE age='-1' AND id>324 ORDER BY id LIMIT 100\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tb
type: range
possible_keys: PRIMARY,idx_ageidc2,idx_agec2
key: PRIMARY
key_len: 4
ref: NULL
rows: 64912
Extra: Using where
1 row in set (0.00 sec)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26250550/viewspace-1182477/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- autotrace 和explain plan for可能導致執行計劃錯誤AI
- CHAR型別函式索引導致結果錯誤型別函式索引
- 錯誤思維導向致IT專案問題多
- Mysql索引型別建立錯誤導致SQL查詢緩慢MySql索引型別
- sql最佳化-錯誤強制型別轉換導致索引失效SQL型別索引
- 什麼會導致HTTP出現429請求過多錯誤?HTTP
- impdp時parallel=4導致的錯誤Parallel
- MySQL 索引 +explainMySql索引AI
- merge語句導致的ORA錯誤分析
- Lombok 的@ToString導致的Maven編譯錯誤LombokMaven編譯
- ORA-04031錯誤導致當機案例分析
- 如何解決url傳參導致錯誤問題
- 修復svn hook導致的字符集錯誤Hook
- Oracle GoldenGate導致IMP出現ORACLE 32588錯誤OracleGo
- sys密碼修改導致的RMAN-00571錯誤密碼
- goldengate命令輸入錯誤導致的血案2Go
- 編譯過程導致ORA-4068錯誤編譯
- [譯] RxJS: 避免因濫用 switchMap 而導致錯誤JS
- 升級Xcode10導致的編譯錯誤XCode編譯
- 修改記憶體導致Ora-27100錯誤記憶體
- 資料庫升級導致ORA-918錯誤資料庫
- 執行計劃錯誤導致系統負載高負載
- ORACLE 大小寫導致找不到索引Oracle索引
- hosts檔案有多餘條目導致dbconsole配置不成功
- PostgreSQL DBA(29) - Backup&Recovery#2(日期格式導致的錯誤)SQL
- 12.2.0.1bug導致的Failed to register in OCRLOCAL group.錯誤AI
- 動態建立 @ViewChild 導致執行時錯誤的原因分析View
- 什麼會導致HTTP代理出現400錯誤請求HTTP
- 編譯檢視導致ORA-00600_17069錯誤編譯
- GoldenGate MSSQL Oracle的主鍵問題導致的錯誤GoSQLOracle
- 解決掉電導致的ORA-600(4194)錯誤
- FAL_SERVER設定錯誤導致SWITCHOVER切換HANG住Server
- Mysql 會導致索引失效的情況MySql索引
- MySQL半一致性讀導致語句級Binlog複製錯誤MySql
- laravel Route RESTful 因路由先後順序導致的解析錯誤LaravelREST路由
- Session物件改變請求頭值導致的401錯誤Session物件
- 關於Apache錯誤頁面導致版本顯示的設定Apache
- 11G的SORT GROUP BY NOSORT導致錯誤執行計劃