我是新手,我有很大的問題。如何使用索引優化SELECT *命令?
我查詢SELECT * FROM TABLE
時間太長。
是否可以使用索引對此進行優化以獲得更快的結果?
我知道,索引是WHERE
條款有用的相似,但是這是SELECT *
?
我有超過20萬的記錄,當然它們都具有唯一的ID。
將足以只是創建一個ID列或什麼是最好的策略一個指數?
我是新手,我有很大的問題。如何使用索引優化SELECT *命令?
我查詢SELECT * FROM TABLE
時間太長。
是否可以使用索引對此進行優化以獲得更快的結果?
我知道,索引是WHERE
條款有用的相似,但是這是SELECT *
?
我有超過20萬的記錄,當然它們都具有唯一的ID。
將足以只是創建一個ID列或什麼是最好的策略一個指數?
你指的是獨有的ID是不是有可能,因爲它是一個索引鍵更多。在應用程序中選擇如此多的數據並處理它不會很快,特別是如果您正在構建網頁。您可能想嘗試:
不要建立在25列的索引。創建多個索引,甚至可以爲每個列創建一個索引。如果用戶可以過濾所有列,那麼確保過濾器是AND而不是OR。如果你在過濾器之間,那麼索引也不會工作。
試試這個首先是作爲一個測試:
SELECT * FROM Ticket WHERE Name = 'AAA'
-- Take length of time that takes
CREATE INDEX IX_TICKET_NAME ON Ticket(Name)
SELECT * FROM Ticket WHERE Name = 'AAA'
-- Seel how long it takes now
如果你看到一個大的性能提升,然後是指數會有所幫助。然後嘗試找出哪些其他列需要索引。
編輯:不允許用戶將所有過濾器留空。給他們一個警告,說明至少必須應用一些過濾器。或者,如果你不能做到這一點,如果所有的過濾器是空白的只是將搜索結果限於100行或某事
對於要過濾的所有列,加只包含這列的索引。
在DB2中,可以通過添加FETCH FIRST N ROWS ONLY來限制返回的行數,請參見http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2.doc.admin%2Ffrstnrw.htm。這將盡可能快,因爲在找到所有200k行之前返回前N行(只要搜索標準已編入索引)。
由於沒有人會看到它們,所以取20萬行是荒謬的。您可能想要計算行數(確實可以使用COUNT等快速完成),並僅顯示前N行,請參閱上文。重點是查看有多少行匹配,而不是查看行本身。我敢打賭!或者你們百分百瘋狂。
如果您正在選擇200k條記錄,那麼將結果從數據庫服務器傳輸到目標應用程序(數據庫管理套件,最終應用程序等)的可能性更大。如果你選擇了一小部分(ish)的數據子集並且需要很長時間,那麼索引可能會有所幫助。這個問題太模糊了。發佈有關您的表結構的特定詳細信息以及提供問題的示例查詢 – Tobsey
我正在使用DB2數據庫。它有表TICKET當我使用SELECT * FROM TABLE IT RETURN 200K記錄但它太長。如果我想僅返回示例SELECT * FROM TICKET WHERE NAME ='AAA'的三條記錄,它也會持續太長 – Dejan
這基本上是一些使用此DB的應用程序。如果用戶在沒有任何過濾器的情況下點擊ENTER,它會向他顯示所有結果 – Dejan