mysql下建立索引讓其index全掃描
第一次用mysql資料庫,最佳化sql語句: SELECT COUNT(id) AS id FROM robots_article WHERE DATE_FORMAT(lastupdated,'%Y-%m-%d') = '2012-03-26'
檢視執行計劃發覺:該表的執行計劃是all也就是全表掃描,由於robots_article是個大表,懷疑是索引關鍵字轉換導致的。
mysql> explain SELECT COUNT(id) AS id FROM robots_article WHERE DATE_FORMAT(lastupdated,'%Y-%m-%d') = '2012-03-26';
+----+-------------+----------------+------+---------------+------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+------+---------------+------+---------+------+---------+-------------+
| 1 | SIMPLE | robots_article | ALL | NULL | NULL | NULL | NULL | 3465570 | Using where |
+----+-------------+----------------+------+---------------+------+---------+------+---------+-------------+
1 row in set (0.00 sec)
不過mysql中沒有函式索引,看來只能用索引全掃描來完成了。
mysql> create index index_lastupdated on robots_article(lastupdated);
Query OK, 2738312 rows affected (21 min 54.30 sec)
Records: 2738312 Duplicates: 0 Warnings: 0
接下來檢視執行計劃index是用的全掃描掃描,問題解決,不過該sql應該用索引範圍rang是可以達到最優的效果,不過暫時還沒有想到如何用mysql來實現oracle的函式索引功能。
mysql> explain SELECT COUNT(id) AS id FROM robots_article WHERE DATE_FORMAT(lastupdated,'%Y-%m-%d') = '2012-03-26'
-> ;
+----+-------------+----------------+-------+---------------+-------------------+---------+------+---------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+-------+---------------+-------------------+---------+------+---------+--------------------------+
| 1 | SIMPLE | robots_article | index | NULL | index_lastupdated | 5 | NULL | 3417754 | Using where; Using index |
+----+-------------+----------------+-------+---------------+-------------------+---------+------+---------+--------------------------+
1 row in set (0.00 sec)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1057722/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【MySQL】全索引掃描的bugMySql索引
- 使用索引快速全掃描(Index FFS)避免全表掃描的若干場景索引Index
- (轉)索引掃描還是全表掃描(Index Scan Or Full Table Scan)索引Index
- 轉)索引掃描還是全表掃描(Index Scan Or Full Table Scan)索引Index
- MySQL中的全表掃描和索引樹掃描MySql索引
- 索引全掃描和索引快速全掃描的區別索引
- Oracle中存取資料掃描Table及索引的方式(全表掃描,索引掃描等)Oracle索引
- oracle 全表掃描,索引範圍掃描與塊的理解Oracle索引
- 索引唯一性掃描(INDEX UNIQUE SCAN)索引Index
- 跳躍式索引掃描(index skip scan) [final]索引Index
- mysql索引覆蓋掃描優化MySql索引優化
- MYSQL 中的GROUP BY 的方式 (1)(loose index scan鬆散掃描 tight index scan緊湊掃描)MySqlIndex
- 有索引卻走全表掃描的實驗分析索引
- Index的掃描方式:index full scan/index fast full scanIndexAST
- 【Oracle】 索引的掃描方式Oracle索引
- 解讀Oracle 索引掃描Oracle索引
- 全表掃描的cost 與 索引掃描Cost的比較 – 無直方圖(10.1.0.3以後)索引直方圖
- mysql 索引( mysql index )MySql索引Index
- 【oracle】index的幾種掃描方式OracleIndex
- 優化全表掃描優化
- delete 與全表掃描delete
- ORACLE全表掃描查詢Oracle
- noworkload下全表掃描cost的計算
- Mysql——index(索引)使用MySqlIndex索引
- 【INDEX_SS】使用HINT使SQL用索引跳躍掃描(Index Skip Scan)方式快速獲取資料IndexSQL索引
- 走索引掃描的慢查詢索引
- 使用索引掃描來進行排序索引排序
- 索引掃描可能不如全表掃描的場景的理解__純粹資料量而言,不涉及CLUSTERING_FACTOR索引
- 查詢全表掃描語句
- oracle優化:避免全表掃描Oracle優化
- 查詢全表掃描的sqlSQL
- Oracle優化-索引原理[注意索引跳躍式掃描!Oracle優化索引
- PostgreSQL技術內幕(七)索引掃描SQL索引
- oracle實驗記錄(分割槽全表掃描(全區掃描) FTS 時候的成本計算)Oracle
- 11g 等頻直方圖下sql不走索引掃描直方圖SQL索引
- 關於Oracle 9i 跳躍式索引掃描(Index Skip Scan)的小測試 (轉)Oracle索引Index
- delete 刪除資料 全表掃描還是掃描所有塊的測試delete
- zt_如何加速索引index建立索引Index