2012-02-09 42 views
0

我讀過如果在IN標準中傳遞的參數數量很大,創建一個臨時表最好。這是用於選擇查詢。這是否適用於更新查詢?我有一個更新查詢,它使用3個表連接(內連接)並在IN標準中傳遞1000個參數,並且此查詢在循環中運行200次或更多次。哪個是執行此查詢的最佳方法?IN在MySQL中更新操作的標準性能

回答

1

IN操作通常很慢。將1000個參數傳遞給任何查詢聽起來都很糟糕。如果你能避免這種情況,那就去做吧。現在,我真的會喜歡臨時表。你甚至可以玩桌子的索引。我的意思是,不要只是在其中添加值,而是使用可幫助您優化搜索的索引。

另一方面,添加索引比添加索引慢。去那裏進行經驗測試。現在,我認爲是必須的,請記住,在使用另一個表時,不需要使用IN子句,因爲可以使用EXISTS子句,這通常會帶來更好的性能。我:

select * from yourTable yt 
where exists (
    select * from yourTempTable ytt 
    where yt.id = ytt.id 
) 

我不知道你的查詢,也不知道數據,但那會給你一個關於如何去做的想法。請注意,內部select *select aSingleField一樣快,因爲數據庫引擎會優化它。

這些都是我的想法。但請記住,爲了100%確定最適合您的問題,最好不要進行這兩種測試並計時。希望得到這個幫助。

+0

感謝您的幫助莫斯迪。我必須嘗試這個。 – 2012-02-10 06:08:59

+0

歡迎@Ebbu! – 2012-02-10 06:10:59