0
我讀過如果在IN標準中傳遞的參數數量很大,創建一個臨時表最好。這是用於選擇查詢。這是否適用於更新查詢?我有一個更新查詢,它使用3個表連接(內連接)並在IN標準中傳遞1000個參數,並且此查詢在循環中運行200次或更多次。哪個是執行此查詢的最佳方法?IN在MySQL中更新操作的標準性能
我讀過如果在IN標準中傳遞的參數數量很大,創建一個臨時表最好。這是用於選擇查詢。這是否適用於更新查詢?我有一個更新查詢,它使用3個表連接(內連接)並在IN標準中傳遞1000個參數,並且此查詢在循環中運行200次或更多次。哪個是執行此查詢的最佳方法?IN在MySQL中更新操作的標準性能
IN
操作通常很慢。將1000個參數傳遞給任何查詢聽起來都很糟糕。如果你能避免這種情況,那就去做吧。現在,我真的會喜歡臨時表。你甚至可以玩桌子的索引。我的意思是,不要只是在其中添加值,而是使用可幫助您優化搜索的索引。
另一方面,添加索引比添加索引慢。去那裏進行經驗測試。現在,我認爲是必須的,請記住,在使用另一個表時,不需要使用IN
子句,因爲可以使用EXISTS
子句,這通常會帶來更好的性能。我:
select * from yourTable yt
where exists (
select * from yourTempTable ytt
where yt.id = ytt.id
)
我不知道你的查詢,也不知道數據,但那會給你一個關於如何去做的想法。請注意,內部select *
與select aSingleField
一樣快,因爲數據庫引擎會優化它。
這些都是我的想法。但請記住,爲了100%確定最適合您的問題,最好不要進行這兩種測試並計時。希望得到這個幫助。
感謝您的幫助莫斯迪。我必須嘗試這個。 – 2012-02-10 06:08:59
歡迎@Ebbu! – 2012-02-10 06:10:59