優化前的語句: postgres 資料庫,優化前20s,優化後200ms
select c.key,
c.x_key,
c.tags,
x.name
from context c
join x
on c.x_key = x.key
where c.key = any (array[15368196, -- 11,000 other keys --)])
and c.x_key = 1
and c.tags @> array[e'blah'];
優化後:
select c.key,
c.x_key,
c.tags,
x.name
from context c
join x
on c.x_key = x.key
where c.key = any (values (15368196), -- 11,000 other keys --)
and c.x_key = 1
and c.tags @> array[e'blah'];
你能發現有啥不同之處嗎?把array換成了values。
我們使用array[...]列舉出所有的關鍵字來進行查詢,但卻欺騙了查詢優化器。
values(...)讓優化器充分使用關鍵字索引。僅僅是一行**的改變,並且沒有產生任何語義的改變。
在查詢語句中用到count函式時,注意盡量避免用count(*), 應該用 count(1).
sql語句執行效率
兩種執行的效果一樣,但執行的速度不一樣,在大資料的時候,可看出。select distinct a.o flowid from chengjiinfo as a where k kecheng not in select kemu from chengjidankeinfo where o flow...
VS自動優化SQL語句邏輯與效率的疑問
用vs2005時發現乙個問題,生成資料集時,vs會幫你自動優化語句,一般都不懷疑微軟的水平,不過這次優化之後實在是看不懂了,懷疑優化錯了,於是在查詢分析器裡試了一下,結果倒是對的,可是執行計畫裡卻顯示優化後的效率低一些,奇怪了 下面 裡前一行是我寫的,後一行是vs優化出來的 使用了sql serve...
VS自動優化SQL語句邏輯與效率的疑問
用vs2005時發現乙個問題,生成資料集時,vs會幫你自動優化語句,一般都不懷疑微軟的水平,不過這次優化之後實在是看不懂了,懷疑優化錯了,於是在查詢分析器裡試了一下,結果倒是對的,可是執行計畫裡卻顯示優化後的效率低一些,奇怪了 下面 裡前一行是我寫的,後一行是vs優化出來的 使用了sql serve...