背景:從兩張有關聯的表查詢數據,A表數據量1400萬,B表數據量8000萬。A與B通過ID邏輯關聯,沒有實際的外鍵。B表是后來擴展出來的.
問題:根據某個ID查詢時超時,運行時跑不出結果。
原因:使用一個or條件,條件里面有一個是A.ID=B.ID
簡單優化:將or條件拆開,使用union all;將之前使用表變量的部分換成了臨時表;對排序的字段加上了索引
結果:在50ms內能夠查詢出結果,這個與之前的超時簡直不能相比。
感想:感謝DBA mm的幫助,讓我有了這樣的體驗,不實際的處理(哪怕很簡單的表關系)千萬級的數據量,真不知道SQL語句的性能差異。
實際的體驗了使用or的性能居然能夠差到這個地步,以后盡量避免使用了。
我沒有描述清楚具體的問題,只是大致的說了下。我自己是明白了,記錄下來以備后面參考。也希望能夠給像我一樣的SQL菜菜鳥有點啟發。
SQL優化的實踐之路還很長,我要慢慢走。工作過程中的體驗隨時記錄下來,分享給大家。
