日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

SQL调优--记一次表统计信息未及时更新导致查询超级慢

發(fā)布時(shí)間:2025/3/21 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL调优--记一次表统计信息未及时更新导致查询超级慢 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

 ? ??? ??? ??某日同事丟給我一個(gè)看上去復(fù)雜的查詢(xún)(實(shí)際就涉及兩張表,套來(lái)套去)說(shuō)只是換了日期條件,但一個(gè)查詢(xún)5秒出數(shù)據(jù),一個(gè)根本查不出來(lái)。現(xiàn)在整理下解決過(guò)程,及涉及的知識(shí)點(diǎn)。 ?

  若有不正之處,請(qǐng)多多諒解并歡迎批評(píng)指正,不甚感激。

  請(qǐng)尊重作者勞動(dòng)成果,轉(zhuǎn)載請(qǐng)標(biāo)明原文鏈接:

  http://www.cnblogs.com/zzry/p/5857751.html

?

一.問(wèn)題描述


環(huán)境:sqlserver 2008r2?

現(xiàn)象:

查詢(xún)涉及到兩張表

ODS_TABLE_A ? ? 每日數(shù)據(jù)700萬(wàn)現(xiàn)在總計(jì)60多億。 ? 已建立索引+分區(qū)

MID_TABLE_B ? ???每日數(shù)據(jù)20萬(wàn) 總計(jì)3000萬(wàn)。 ? ? ? ? 已建立索引未分區(qū)

當(dāng)etldate為?'2016-08-12' 及以前的時(shí)間時(shí),本查詢(xún)5秒出數(shù)據(jù),

當(dāng)etldate為?'2016-08-16' 及以后的時(shí)間時(shí),本查詢(xún)出不來(lái)數(shù)據(jù)。

貼上問(wèn)題sql:做過(guò)數(shù)據(jù)字段處理,針對(duì)本篇主題注意點(diǎn)放在查詢(xún)因?yàn)槿掌诘倪x擇不同導(dǎo)致查詢(xún)時(shí)間變的超級(jí)慢,而不是改變sql寫(xiě)法比如用臨時(shí)表,強(qiáng)制索引上。

?

----------《代碼開(kāi)始》

select COUNT(distinct(case when COL_USERID3 is null then COL_USERID6 end)) as 'aa',COUNT(distinct(case when COL_USERID3 is null and COL_USERID7 is not null then COL_USERID6 end)) as 'bb',COUNT(distinct(case when COL_USERID3 is not null then COL_USERID6 end)) as 'cc',COUNT(distinct(case when COL_USERID3 is not null and COL_USERID7 is not null then COL_USERID6 end)) as 'dd',SUM(case when COL_USERID3 IS not null then ee end) as 'ee'from(select c.COL_USERID3,c.ee,g.COL_USERID6from(select b.COL_USERID2 as COL_USERID3,COUNT(b.COL_USERID2) as eefrom(select COL_USERID as COL_USERID1,min(EventTime) as time1from ODS_TABLE_A where EtlDate = '2016-08-12'and colid LIKE 'heihei%'group by COL_USERID)as ajoin(select COL_USERID as COL_USERID2,eventtime as time2from ODS_TABLE_A where EtlDate = '2016-08-12'and ItemId = '1111111111101'and colid like 'haha-%'and colid not like 'haha-skill%'and colid not like 'haha-fine%')as b on a.COL_USERID1 = b.COL_USERID2 and a.time1 > b.time2group by b.COL_USERID2)as cright join(select DISTINCT d.COL_USERID4 as COL_USERID6from( select distinct COL_USERID as COL_USERID4from MID_TABLE_B where etldate = '2016-08-12' )as djoin(select COL_USERID AS COL_USERID5from ODS_TABLE_A where EtlDate = '2016-08-12'and colid LIKE 'heihei%')as f on d.COL_USERID4 = f.COL_USERID5)as gon c.COL_USERID3 = g.COL_USERID6)as ileft join (select COL_USERID as COL_USERID7from MID_TABLE_Bwhere EtlDate = '2016-08-12' and IsTodayPay = '1')as hon i.COL_USERID6 = h.COL_USERID7

?----------《代碼結(jié)束》

?

二。解決過(guò)程


 1.先看了下上述代碼的執(zhí)行計(jì)劃如下圖初看上去需要用索引的地方都用到了。應(yīng)該沒(méi)啥大問(wèn)題。

可能你注意到系統(tǒng)提示的缺少索引信息,加上去一樣效果,不能解決‘2016-08-16’ 查詢(xún)慢的問(wèn)題。

?

?

2.在修改下日期 ,就是把?【所有】??etldate=‘2016-08-12’??的改成??etldate=‘2016-08-16’ 看下執(zhí)行計(jì)劃: 對(duì)不起跑了半個(gè)小時(shí)沒(méi)出來(lái),查看估計(jì)的執(zhí)行執(zhí)行和上面的圖類(lèi)似。 減少涉及到數(shù)據(jù)集的量 加top 1 我再看執(zhí)行計(jì)劃: 不貼圖了 結(jié)果就是比上面的圖少了個(gè) 【并行度
初步以為是優(yōu)化器因?yàn)楣烙?jì)行數(shù)等不準(zhǔn)的原因沒(méi)選擇并行度,趕緊找代碼讓它強(qiáng)行這樣走。 找到一篇宋大師的:強(qiáng)制SQL Server執(zhí)行計(jì)劃使用并行提升在復(fù)雜查詢(xún)語(yǔ)句下的性能 http://www.cnblogs.com/CareySon/p/3851113.html 二話(huà)不說(shuō)加關(guān)鍵字 OPTION(querytraceon 8649) 可是應(yīng)用到實(shí)際發(fā)現(xiàn)查詢(xún)效率無(wú)任何改善,久久不出結(jié)果。后來(lái)問(wèn)宋大師(感謝宋大神)。他說(shuō)有些操作是沒(méi)法并行的,更新統(tǒng)計(jì)信息試試先。 一擊命中!一擊命中!一擊命中! 執(zhí)行如下代碼: update?STATISTICS?ODS_TABLE_A ?--(把ODS_TABLE_A ?這個(gè)大表統(tǒng)計(jì)信息更新) ? 默認(rèn)情況下,查詢(xún)優(yōu)化器已根據(jù)需要更新統(tǒng)計(jì)信息以改進(jìn)查詢(xún)計(jì)劃;但在某些情況下,你可以通過(guò)使用 UPDATE STATISTICS 或存儲(chǔ)過(guò)程 sp_updatestats 來(lái)比默認(rèn)更新更頻繁地更新統(tǒng)計(jì)信息,提高查詢(xún)性能。針對(duì)文中此種情況新插入的數(shù)據(jù)沒(méi)統(tǒng)計(jì)信息,大表自動(dòng)更新統(tǒng)計(jì)信息觸發(fā)自動(dòng)更新機(jī)制頻率不夠,最好定期更新。
關(guān)于update?STATISTICS 就不累述了 :給出相關(guān)技術(shù)貼連接 更新統(tǒng)計(jì)相關(guān)知識(shí)點(diǎn)傳送門(mén):https://msdn.microsoft.com/zh-cn/library/ms187348.aspx 至此問(wèn)題解決。

?

三。總結(jié)


  對(duì)于大表新插入的數(shù)據(jù)沒(méi)及時(shí)更新統(tǒng)計(jì)信息,導(dǎo)致出現(xiàn)上面文中的現(xiàn)象,一個(gè)日期導(dǎo)致查詢(xún)效率天壤之別的分水嶺(查12號(hào)前5秒出數(shù)據(jù),查12號(hào)后死活不出來(lái)。)?

? ??解決辦法是大表自動(dòng)更新統(tǒng)計(jì)信息觸發(fā)自動(dòng)更新機(jī)制頻率不夠,定期更新。

轉(zhuǎn)載于:https://www.cnblogs.com/firstdream/p/7932265.html

總結(jié)

以上是生活随笔為你收集整理的SQL调优--记一次表统计信息未及时更新导致查询超级慢的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。