回覆列表
  • 1 # 使用者218312333412

    需求:3個表,主鍵都是id,t1、t2資料量在百萬級,t3 資料量是1萬,按 t3 的 time 欄位排序分頁,同時從t1、t2取出相關聯的資料,我想用一條查詢解決:select t1.*,t2.*,t3.* from t1,t2,t3 where t1.id = t3.id and t2.id = t3.id order by t3.time limit 4000,20 這個查詢當 limit 後面的數比較大時就越來越慢分析:1.你的SQL語句為INNER JOIN 若是LEFT JOIN可以另外解決;2.WHERE部分除了連結操作,無其他過濾條件,也就無特殊的手段;3.不清楚你們的業務情況和資料分佈關係,也即沒有辦法給出非常特殊的解決手段;4.不可能叫你們修改資料庫表結構;5.你一次性返回的資料量太大且排序,會造成二次回表的演算法,這樣查詢效能會驟降;基於上述分析的因素,建議做法:如 @陳俊儒 所言分2條SQL執行;SELECT t3.ID from t1,t2,t3 where t1.id = t3.id and t2.id = t3.id order by t3.time limit 4000,20;SELECTt1.*,t2.*,t3.* FROM t1,t2,t3 WHERE t1.id = t3.id and t2.id = t3.id AND T3.id IN(id_value...);若是對t3表建立一個組合索引,格式為(t3.ID,t3.time)那麼第一條SQL就可以使用索引覆蓋技術完成,而且這張表的資料量也只有1W條,猜測可能屬於配置性資料,變動少,可以考慮建立這樣的索引;請提問者內部測試下上述給出的技術方案!

  • 中秋節和大豐收的關聯?
  • 用“無形化有形”來描寫孤獨的句子有哪些?