簡體   English   中英

Mysql 5.5的MySQL查詢建議

[英]Mysql query suggestion for Mysql 5.5

我有以下查詢在mysql 5.6中運行良好,但是在5.5中執行需要10秒鍾,我知道在舊版mysql中NOT IN子句存在性能問題,但是我看不到在舊版mysql中處理它的另一種方法版本,我真的很感謝任何建議:

SELECT 
DISTINCT C.chapter, 
J.name 
FROM chart as C 
INNER JOIN resume as J ON J.serie_id = C.serie_id 
WHERE chapter NOT IN 
(
  SELECT DISTINCT chapter FROM chart WHERE recorded = '0000-00-00'
) 
AND 
(
  C.chapter NOT IN 
  (
     SELECT chapter FROM chart_2
  )
) 
ORDER BY chapter DESC

基本上,它的工作是從圖表表中選擇唯一的章節,並從聯接的表格中選擇名稱,然后再次從圖表表中選擇具有注冊日期的唯一章節,這意味着尚未記錄並執行一個匹配項,以排除使用NOT IT的第一個子查詢中的那些項。 我使用區別對待,因為在圖表表中該章節可以重復多次,而我只想選擇那些記錄為單個結果的章節(例如將它們分組)。 最后,它檢查該章是否在chart_2表上不存在。 它可以在mysql 5.6上正常工作,但是在5.5中它會花費很長時間。 有任何想法嗎?

可能嘗試加入。

SELECT 
DISTINCT C.chapter, 
J.name 
FROM chart as C 
INNER JOIN resume as J ON J.serie_id = C.serie_id 
LEFT OUTER JOIN chart C1 ON C.chapter = C1.chapter AND C1.recorded = '0000-00-00'
LEFT OUTER JOIN chart_2 C2 ON C.chapter = C2.chapter 
WHERE C1.chapter IS NULL
AND C2.chapter IS NULL
ORDER BY C.chapter DESC

就我個人而言,這樣的查詢效果很差,我發現最好為in子句獲取單獨查詢的值列表,而不是使用子查詢。

因此,從“記錄在哪里的圖表的SELECT DISTINCT”章獲取了一組結果='0000-00-00'和從“圖表_2”的選擇在章章中的結果,將它們合並,然后將它們添加到查詢中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM