作者 主題: SQL查詢速度 真的不太了解是為什麼  (閱讀 8337 次)

0 會員 與 1 訪客 正在閱讀本文。

shyuwei

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
各位大大,小弟實在是想不透為什麼才來發問了

以下為小弟的語法

代碼: [選擇]
select SN
where not exists (select distinct sbcHisMaster.Attr1 from sbcHisMaster where sbcHisMaster.Attr1 = sbcProductMaster.SN
and sbcHisMaster.HisTypeNO='A'and sbcHisMaster.Cons_Date >= '2011-03-01'  '2011-03-10')
and Cons_Date >= '2011-03-01' and Cons_Date < '2011-03-10'

這邊有個疑問是,今天如果我查詢2011/03/01到2011/03/23這個區間的資料 比對出來光查詢時間就會花上三分多鐘
但是今天如果我查詢2011/01/01到2011/03/23區間的資料,照理講應該要更久,因為比對的資料量更大,結果卻不是這樣,查詢花費時間指需要7秒 ???

小弟真的是不解,請教各位大大是不是上面的語法有問題呢?還是說MS SQL有什麼檢索的功能(小弟瞎猜的,因為還記得當一月份的時候查詢1/1-1/30也是慢的可怕,但是現在查1/1-1/30也只要三秒多,都是直接在管理工具下指令的)

請各位大大解惑了 感謝 已經想破頭了 ;D
« 上次編輯: 2011-03-23 13:58 由 shyuwei »

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
回覆: SQL查詢速度 真的不太了解是為什麼
« 回覆 #1 於: 2011-03-23 01:14 »
我不是 DB 專家,可是我覺得這 SQL command 怪怪的 (@@),你不覺得嗎?

fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
回覆: SQL查詢速度 真的不太了解是為什麼
« 回覆 #2 於: 2011-03-23 09:50 »
先用explain來檢查一下你的sql,看看查詢速度的問題可能出在哪裡。
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.

shyuwei

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
回覆: SQL查詢速度 真的不太了解是為什麼
« 回覆 #3 於: 2011-03-23 12:18 »
我不是 DB 專家,可是我覺得這 SQL command 怪怪的 (@@),你不覺得嗎?

其實本來是用 not in語法來做查詢的動作 但是網路上查了一下有提到not的效率並不高 所以改成用exist

以下是原本的語法
代碼: [選擇]
select SN
where SN not in
( select distinct Attr1 from sbcHisMaster where HisTypeNO='A' and Cons_Date >= '2011-03-01' and Cons_Date < '2011-03-10')
and Cons_Date >= '2011-03-01'
and Cons_Date < '2011-03-10'

先用explain來檢查一下你的sql,看看查詢速度的問題可能出在哪裡。
還沒用過explain來檢查執行效率過,來試試看好了

ps 剛剛執行explain試著分析 但是跳出錯誤訊息 找不到預存程式"EXPLAIN" ,小弟SQL是用Microsoft SQL Server 2008

fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
回覆: SQL查詢速度 真的不太了解是為什麼
« 回覆 #4 於: 2011-03-23 13:21 »
啥,你前面不是說mysql...XD
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: SQL查詢速度 真的不太了解是為什麼
« 回覆 #5 於: 2011-03-23 13:51 »
各位大大,小弟實在是想不透為什麼才來發問了

以下為小弟的語法

代碼: [選擇]
select SN
where not exists (select distinct sbcHisMaster.Attr1 from sbcHisMaster where sbcHisMaster.Attr1 = sbcProductMaster.SN
and sbcHisMaster.HisTypeNO='A'and sbcHisMaster.Cons_Date >= '2011-03-01'  '2011-03-10')
and Cons_Date >= '2011-03-01' and Cons_Date < '2011-03-10'

這邊有個疑問是,今天如果我查詢2011/03/01到2011/03/23這個區間的資料 比對出來光查詢時間就會花上三分多鐘
但是今天如果我查詢2011/01/01到2011/03/23區間的資料,照理講應該要更久,因為比對的資料量更大,結果卻不是這樣,查詢花費時間指需要7秒 ???

小弟真的是不解,請教各位大大是不是上面的語法有問題呢?還是說MySQL有什麼檢索的功能(小弟瞎猜的,因為還記得當一月份的時候查詢1/1-1/30也是慢的可怕,但是現在查1/1-1/30也只要三秒多,都是直接在管理工具下指令的)

請各位大大解惑了 感謝 已經想破頭了 ;D


啥,你前面不是說mysql...XD

我看到後來也是呆了好一會~ 樓主該不會連自己用啥資料庫都搞不清楚吧  :D

shyuwei

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
回覆: SQL查詢速度 真的不太了解是為什麼
« 回覆 #6 於: 2011-03-23 13:58 »
小弟真的是不解,請教各位大大是不是上面的語法有問題呢?還是說MySQL有什麼檢索的功能(小弟瞎猜的,因為還記得當一月份的時候查詢1/1-1/30也是慢的可怕,但是現在查1/1-1/30也只要三秒多,都是直接在管理工具下指令的)

[/quote]
啥,你前面不是說mysql...XD

本來是要打MS SQL...打成MySQL了 Orz 真的是昏頭了