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

  免費(fèi)注冊 查看新帖 |

Chinaunix

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

如何優(yōu)化索引? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2013-01-19 22:15 |只看該作者 |倒序?yàn)g覽
5可用積分
SQL1:SELECT COUNT(*) FROM table1 WHERE (displayorder>='0' or displayorder='-2' ) and zplb0='954'
SQL2:select * from table1 WHERE (displayorder>='0' or displayorder='-2' ) and zplb0='954' order by lastpost desc limit 0,36

SELECT COUNT(*) FROM table1 有32萬條數(shù)據(jù)
SELECT COUNT(*) FROM table1 WHERE  zplb0='954'  有10萬條數(shù)據(jù)
SELECT COUNT(*) FROM table1 WHERE (displayorder>='0' or displayorder='-2' ) and zplb0='954'  有10萬條數(shù)據(jù)

索引:KEY `zplb0` (`zplb0`,`displayorder`,`lastposter`)   

explain SELECT COUNT(*) FROM cdb_threads WHERE (displayorder>='0' or displayorder='-2' ) and zplb0='954'  
結(jié)果 Using where; Using index

explain select * from cdb_threads WHERE (displayorder>='0' or displayorder='-2' ) and zplb0='954' order by lastpost desc limit 0,36

結(jié)果 type = all ; extra  = Using where; Using filesort


sql2執(zhí)行要1秒多,非常慢。

請問這樣的sql如何優(yōu)化好。謝謝!

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2013-01-19 23:10 |只看該作者
回復(fù) 1# yonghedawang

對于這個(gè),可以考慮建立索引+其他解決辦法共同來解決。
關(guān)于建立索引,可以考慮在zplb0和lastpost建立索引,這樣能兼顧到SQL1和SQL2
index idx_zplb0_lastpost(`zplb0`,`lastpost `) 。
關(guān)于其他解決辦法,比如SQL1類型的統(tǒng)計(jì)可以使用其他方式實(shí)現(xiàn)統(tǒng)計(jì),而不需要每次都統(tǒng)計(jì)10萬多的數(shù)據(jù),可以使用一個(gè)額外的表進(jìn)行統(tǒng)計(jì)。比如凌晨使用事件定期統(tǒng)計(jì)一次,然后使用類似觸發(fā)器的功能進(jìn)行累加。對于這種統(tǒng)計(jì)類型的語句性能會(huì)好很多。尤其是統(tǒng)計(jì)結(jié)果不需要非常精確的時(shí)候。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2013-01-21 09:11 |只看該作者
謝謝你的回復(fù),sql1的效率本身不低。sql2要一秒多,我現(xiàn)在還沒有想到好的辦法。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2013-01-21 09:38 |只看該作者
本帖最后由 wangjj20 于 2013-01-21 09:41 編輯

or條件可以使用類似
select * from table1 WHERE displayorder>='0'  and zplb0='954'
union all
select * from table1  where displayorder='-2' and zplb0='954'
這樣的語句。
索引可以嘗試displayorder+zplb0+lastpost

另外看下profile,看下慢在哪個(gè)部分。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2013-01-21 18:19 |只看該作者
mark下關(guān)注下結(jié)果

論壇徽章:
8
綜合交流區(qū)版塊每周發(fā)帖之星
日期:2015-12-02 15:03:53數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-10-02 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-10-02 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34酉雞
日期:2013-10-19 10:17:1315-16賽季CBA聯(lián)賽之北京
日期:2017-03-06 15:12:44
6 [報(bào)告]
發(fā)表于 2013-01-22 10:28 |只看該作者
count(*)和*,而且后面的選擇性很差

第二個(gè)sql用index idx_zplb0_lastpost(`zplb0`,`lastpost `) 做一年應(yīng)該比較好

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2013-01-24 14:03 |只看該作者
本帖最后由 G8bao7 于 2013-01-24 14:09 編輯

回復(fù) 1# yonghedawang


1、由于滿足where條件的記錄數(shù)占全表的比重比較大(10W/32W),而且sql2是select *,也不能使用索引覆蓋掃描。
    優(yōu)化器認(rèn)為索引還沒有全表掃描快
2、由于where 條件中displayorder是范圍查找,排序并不會(huì)使用`zplb0`索引(`zplb0`,`displayorder`都是等值查找才會(huì)使用),
    所以order by lastpost會(huì)引起Using filesort

sql2優(yōu)化建議:
select t2.* from (select 主鍵ID from table1 WHERE (displayorder>='0' or displayorder='-2' ) and zplb0='954' order by lastpost desc limit 0,36 ) as t1
,table1 AS t2
where t1.主鍵ID=t2.主鍵ID;
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP