MySQL SQL優化-讓你腦洞大開

  • A+
所屬分類:MySQL

由于分庫分表的原因,和開發規定了不能使用 表表JOIN 語句。因此,我們要將 JOIN 語句的轉化成使用 IN 來做。如現在有 表 A(a_id, c_a)c_a有普通索引,表 B(b_id, c_a) 這兩個表要關聯, 應該轉化為以下步驟處理:

  • 先查詢B中的 a_id

  • 使用 IN 查詢 A 表

場景

現在表的數據量有 800萬。

一般的使用語句是:

上面語句會執行的很快,知道使用 explain 的都明白這樣一般都是會使用索引的,并且是所有范圍掃描。

MySQL不會從 1 開始 掃描 800萬,而是從555555 掃描到 555559(只要掃描5行數據)。

在一般情況下是沒有什么問題的。但是如果 IN 里面的數據是不連續的就有很大問題了。

創建表結構語句

下面是具體的實驗過程

  • 使用IN查詢連續的數

  • 使用IN查詢不連續的數

  • 使用UNION優化

從上面可以看出上面使用UNION的方法生成一個臨時表作為關聯的主表。

拓展

要是MySQL有只帶的一個行轉列的函數那就完美了。這樣我們就可以不用使用UNION了。

要是能像上面就太棒了簡直。

 

感覺本文內容不錯,讀后有收獲?

逛逛衣服店,鼓勵作者寫出更好文章。

weinxin
微信公眾號
掃一掃關注運維生存時間公眾號,獲取最新技術文章~

發表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前評論:3   其中:訪客  3   博主  0

    • 匿名 0

      請問博主這個代碼高亮是什么插件?大佬,請告知一下

      • PHP程序員雷雪松 2

        不錯的sql優化文章!!!

        • 威客眾包 0

          謝謝博主分享,受教啦