亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 7995 | 回復: 4
打印 上一主題 下一主題

【已解決】Mysql復合索引字段順序的問題 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-01-08 16:26 |只看該作者 |倒序瀏覽
本帖最后由 cenalulu 于 2013-01-09 11:06 編輯

表test如下:
| Field       | Type                  | Null | Key | Default | Extra          |
+-------------+-----------------------+------+-----+---------+----------------+
| pid         | int(10) unsigned      | NO   | PRI | NULL    | auto_increment |
| tid         | mediumint( unsigned | NO   | MUL | 0       |                |
| showtime    | int(11)               | YES  |     | 0       |                |

數(shù)據(jù)量200w+

原來有個復合索引建立在tid和showtime上的。
現(xiàn)有個sql
SELECT * FROM test  WHERE AND tid='47992' AND pid >=1660250 and showtime>0  ORDER BY p.showtime,p.pid LIMIT 0, 40;
于是將索引修改如下(tid為最左前綴不能改,有別的sql用到tid+showtime):
ALTER TABLE test ADD INDEX idx_tid_showtime_pid(tid,showtime,pid);
執(zhí)行sql效率很低,請看explain
+----+-------------+----------------+-------+----------------------+----------------------+---------+------+--------+-------------+
| id | select_type | table          | type  | possible_keys        | key                  | key_len | ref  | rows   | Extra       |
+----+-------------+----------------+-------+----------------------+----------------------+---------+------+--------+-------------+
|  1 | SIMPLE      | test            | range | idx_tid_showtime_pid | idx_tid_showtime_pid | 8       | NULL | 123444 | Using where |
+----+-------------+----------------+-------+----------------------+----------------------+---------+------+--------+-------------+

感覺效率依然很低,通過slow-log記錄可以看到執(zhí)行時間在0.7秒以上。
測試了下去掉showtime條件后只使用tid和pid的復合索引效率是很高的,于是再次修改索引:
ALTER TABLE test ADD INDEX idx_tid_pid_showtime(tid,pid,showtime);
+----+-------------+-------+-------+---------------------------------------------------------------------------------------+----------------------+---------+------+------+-----------------------------+
| id | select_type | table | type  | possible_keys                                                                         | key                  | key_len | ref  | rows | Extra                       |
+----+-------------+-------+-------+---------------------------------------------------------------------------------------+----------------------+---------+------+------+-----------------------------+
|  1 | SIMPLE      | test     | range | idx_tid_showtime_pid,idx_tid_pid_showtime | idx_tid_pid_showtime | 12      | NULL | 3290 | Using where; Using filesort |
+----+-------------+-------+-------+---------------------------------------------------------------------------------------+----------------------+---------+------+------+------
這樣效率大大提高。

以上問題,從我個人理解上是這樣的,idx_tid_showtime_pid(tid,showtime,pid)這條索引滿足了使用索引order by的條件,所以需要掃描123444行數(shù)據(jù)。
而 idx_tid_pid_showtime(tid,pid,showtime)這條索引的列順序和order by的順序不一樣,排序無法使用索引,而where條件使用索引效率很好,只掃描了3290行數(shù)據(jù),即使加上排序的時間也很快。

不知道真實情況是否這樣,求大神給出正確解釋。

論壇徽章:
9
每日論壇發(fā)貼之星
日期:2016-01-04 06:20:00數(shù)據(jù)庫技術版塊每日發(fā)帖之星
日期:2016-01-04 06:20:00每日論壇發(fā)貼之星
日期:2016-01-04 06:20:00數(shù)據(jù)庫技術版塊每日發(fā)帖之星
日期:2016-01-04 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-01-04 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-01-04 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2016-01-04 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2016-01-04 06:20:00數(shù)據(jù)庫技術版塊每周發(fā)帖之星
日期:2016-03-07 16:30:25
2 [報告]
發(fā)表于 2013-01-08 17:34 |只看該作者
樓主理解是正確的。
情況1的結果是 tid過濾完以后按照showtime,pid順序一個個檢查 pid的值是不是> 1660250 (從執(zhí)行結果來看需要掃描12萬行左右才能得到結果
情況2 的結果是 tid過濾完以后,繼續(xù)用pid索引過濾 > 1660250, 最后再進行排序。(從執(zhí)行計劃來看只需對2000行進行排序)

論壇徽章:
0
3 [報告]
發(fā)表于 2013-01-08 17:52 |只看該作者
回復 2# cenalulu
感謝解答!
看來加索引這事還真的經(jīng)過實際的測試,如果tid+pid過濾后的數(shù)據(jù)大于123444,效率應該比不上第一條索引了。。

論壇徽章:
8
綜合交流區(qū)版塊每周發(fā)帖之星
日期:2015-12-02 15:03:53數(shù)據(jù)庫技術版塊每日發(fā)帖之星
日期:2015-10-02 06:20:00IT運維版塊每日發(fā)帖之星
日期:2015-10-02 06:20:00IT運維版塊每日發(fā)帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年紀念徽章
日期:2013-10-24 15:41:34酉雞
日期:2013-10-19 10:17:1315-16賽季CBA聯(lián)賽之北京
日期:2017-03-06 15:12:44
4 [報告]
發(fā)表于 2013-01-09 18:55 |只看該作者
索引就是個平衡的藝術

論壇徽章:
0
5 [報告]
發(fā)表于 2016-06-22 14:01 |只看該作者
為什么會趕不上第一條索引 搞不懂~回復 3# wangjj20


   
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP