国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術文章
文章詳情頁

關于Mysql索引查詢效率問題

瀏覽:142日期:2022-06-11 09:23:43

問題描述

SELECT COUNT(*) FROM `set_gif` WHERE `zhuanid` = 0 AND `webid` IN (’0’,’2’,’21’,’22’,’27’,’11’,’31’) AND `empty` = 0 LIMIT 1 [ RunTime:0.1423s ]SELECT `id`,`webid`,`catid`,`path`,`pname`,`pathall`,`title`,`cdn`,`sort`,`likecount`,`fsize`,`time`,`viewcount`,`likecount` FROM `set_gif` WHERE `zhuanid` = 0 AND `webid` IN (’0’,’2’,’21’,’22’,’27’,’11’,’31’) AND `empty` = 0 ORDER BY time desc,id desc LIMIT 0,10 [ RunTime:0.0045s ]

兩個sql語句 后面runtime是執(zhí)行時間的意思 數據量是150W

字段說明 zhuanid是數值 webid是數值 empty是0或者1

第一句SQL使用的普通索引是 zhuanid webid empty的數的一組索引第二句SQL使用的索引是zhuanid webid empty一組索引 time 與 id是一組索引

為什么第一句的count會消耗這么長的時間 相比第二句復雜的查詢反而是很短的時間

問題解答

回答1:

第一句sql, limit 1第二句sql, limit 0, 10你讓count去數150w條....還想比查看前10條快?

回答2:

我的猜測:索引字段沒有設置不可為空,導致 count(*) 沒有使用到索引。

另外這兩條語句本身并不等價,第一條針對全表,第二條不是,好像沒啥可比性

回答3:

要看一下你的執(zhí)行計劃 第一條sql結果集很大的情況下是需要掃描所有符合條件的記錄的 這種情況下第二條sql走time id的索引只需要找到10條滿足條件的記錄即可 所以會比較快 另外zhuanid webid empty的組合索引也只會使用到zhuanid列和webid的range部分 可以修改索引順序為zhuanid empty webid

回答4:

第一條SQL執(zhí)行后,結果保存在Cache.

第二條SQL執(zhí)行,依賴了第一條SQL的Cache,所以會更快(其實第二條SQL用了排序,應該更慢才對).

樓主可以在第一條SQL執(zhí)行完后,執(zhí)行

RESET QUERY CACHE;

重置Cache,然后在執(zhí)行第二條SQL,結果是不一樣的.

相關文章:
主站蜘蛛池模板: 万山特区| 民勤县| 新营市| 阿巴嘎旗| 林周县| 安多县| 遂溪县| 珲春市| 三台县| 五家渠市| 巢湖市| 梓潼县| 宁明县| 宕昌县| 河曲县| 霍城县| 眉山市| 江油市| 政和县| 大悟县| 敦煌市| 沾益县| 虹口区| 肥东县| 湾仔区| 宾阳县| 彰化市| 镇安县| 延川县| 岳普湖县| 大理市| 贡觉县| 济宁市| 汤原县| 崇州市| 北票市| 昂仁县| 将乐县| 石林| 东乌珠穆沁旗| 鄄城县|