我在我的數據庫表中,對這些CONFIGS版本一起一些應用程序保存配置設置:如何擺脫'where'子句中的嵌套select?
app_id | config | version
--------------------------
app1 | conf1v1 | 1
app2 | conf2v1 | 1
app1 | conf1v2 | 2
我需要爲每個應用程序的最新配置信息(那些具有最大版本號)。我使用這樣的查詢:
select c.app_id, c.config, c.version
from config c
where
c.version=(select max(c2.version) from config c2 where c2.app_id = c.app_id)
但它似乎是低效的。我想知道,是否有更有效的方法來完成這項任務?
當你說它「*似乎*效率低下」時,你是什麼意思?你真的衡量了嗎?你有沒有調查執行計劃?從表面上看,如果所有需要的索引都已到位,我並不認爲這個查詢效率低下的明顯原因。 –
@BrankoDimitrijevic我相信在where子句中選擇將導致查詢返回的每一行的表命中。 –
@BrankoDimitrijevic我應該爲這張桌子創建什麼樣的索引? –