SQL優(yōu)化:合理使用變量
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
新手小伙伴平時(shí)可能比較少用到變量,其實(shí)變量在數(shù)據(jù)查詢(xún)過(guò)程中經(jīng)常使用到,而且可以有效提高查詢(xún)速度。 變量其實(shí)就是我們定義的一個(gè)可變參數(shù),其基本語(yǔ)法如下:
使用變量后,相同的查詢(xún)語(yǔ)句如果只是賦值不同,可以重復(fù)使用第一次的執(zhí)行計(jì)劃,做到一次解析,多次復(fù)用的效果,減少執(zhí)行計(jì)劃的解析就會(huì)相應(yīng)提高查詢(xún)速度了。我們看如下示例:
如果單獨(dú)執(zhí)行這兩條查詢(xún)語(yǔ)句,查詢(xún)優(yōu)化器認(rèn)為是不同的SQL語(yǔ)句,需要解析兩次。 我們使用變量對(duì)其進(jìn)行修改
執(zhí)行完之后,只需要修改@ORDER_ID的值為'113’,就可以重復(fù)使用上面的執(zhí)行計(jì)劃了。 由于上面的語(yǔ)句比較簡(jiǎn)單,可能看不出效果,但是如果遇到比較復(fù)雜的查詢(xún)語(yǔ)句,變量查詢(xún)往往能起到很好的效果。
事物都存在兩面性,變量對(duì)常見(jiàn)查詢(xún)可以提高查詢(xún)效率。但是也有例外,比如在WHERE條件中的字段是“傾斜字段”的時(shí)候。 “傾斜字段”指該列中的絕大多數(shù)的值都是相同的,比如人口調(diào)查表,其中“民族”這列,90%以上都是漢族。那么如果一個(gè)SQL語(yǔ)句要查詢(xún)30歲的漢族人口有多少,那“民族”這列必然要被放在WHERE條件中。這個(gè)時(shí)候如果采用綁定變量@NATION會(huì)存在很大問(wèn)題。 如果@NATION傳入的第一個(gè)值是“漢族”,那整個(gè)執(zhí)行計(jì)劃必然會(huì)選擇表掃描。
當(dāng)?shù)诙€(gè)值傳入的是“畬族”,正常情況下“畬族”在表中占的比例可能只有萬(wàn)分之一,應(yīng)該采用索引查找。
由于重用了第一次解析的“漢族”的那個(gè)執(zhí)行計(jì)劃,那么第二次也將采用表掃描方式。這個(gè)問(wèn)題就是著名的“變量窺測(cè)”,建議對(duì)于“傾斜字段”不要采用綁定變量。 今天的課就講到這里,如果對(duì)變量還有什么不明白的,可以在底下留言,我會(huì)一一回復(fù)的。 閱讀原文:原文鏈接 該文章在 2025/6/23 12:57:24 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |