2013-04-02 48 views
0

我在Sybase IQ 12.7,看起來像一個查詢:使用ON的Sybase IQ 12.7子查詢執行速度是否比聯接慢?

select ip from iplookup where ip in (select ip from persisted_info) 

其中iplookup被定義爲一列。

我看到了IN和子查詢,並決定一定要慢(全表掃描),而這將是首選:

select lk.ip from iplookup lk, persisted_info ps where lk.ip = ps.ip 

,但我要小心,並得到一些證據來支持我。 Sybase IQ不支持EXPLAIN PLAN,並使用SET STATISTICS TIME ON返回語法錯誤。

要解決這個問題,我想知道如何獲得之一:

  1. 時序信息
  2. 執行計劃信息

編輯:我使用SQSH從Mac交談當我在查詢之前添加SET STATISTICS IO ON時,Sybase和我會在響應中獲得額外的信息。

+0

這兩個語句不一定等同! –

+0

我知道這兩個SQL語句不一定等價,但正如我所說的,我試圖找到一些證據。 – Spaceghost

+1

我不是在談性能,我在談論他們實現的目標。他們可以返回完全不同的結果!請參閱此處:http://sqlfiddle.com/#!12/fcf04/3 –

回答

1

我認爲你正在尋找(編輯語法,我在ASE模式)

set TEMPORARY OPTION NOEXEC = on; 
set TEMPORARY OPTION QUERY_PLAN = on; 
set TEMPORARY OPTION QUERY_TIMING = on; 

這些寫入服務器日誌,這我不知道你有機會獲得。如果你可以沒有確切的IO和時間統計信息,那麼你將不需要訪問服務器日誌,並可以做到以下幾點...

如果你在@@版本12.7 ESD3或更高版本,你應該能夠執行以下兩個查詢中的任一個,並將輸出放入.html或.xml文件並查看它。

--XML 
SELECT GRAPHICAL_PLAN ('select * from t1 where ip in (select ip from t2)') 
--HTML 
SELECT HTML_PLAN ('select * from t1 where ip in (select ip from t2)') 

連接至更多信息:http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc74603.1270/html/iqrbwin/CIHEFAIF.htm

+0

我同意這兩個查詢應該以類似的方式執行,但子查詢在我嘗試時似乎會滯後。可悲的是,這三個命令都不被Sybase IQ 12.7接受。第一個返回有關Transact-SQL的消息,另外兩個是語法錯誤。 – Spaceghost

+0

您的iplookup.ip列與您的persisted_info.ip列有相同的數據類型嗎?無論如何,優化器看起來應該在「in」子句中執行分組葉級相關子查詢。他們都有「HG」指標嗎? sp_iqindex'iplookup','ip' – Hotel

+0

感謝您的更新。我現在正在等待數據庫管理員訪問該計劃。是的,兩列都具有相同的數據類型,並且都有HG索引。我在Sybase性能指南中看到一個說明,即子查詢應該只有1025個值......但這可能是用戶提供的值而不是查詢結果。 – Spaceghost