簡單情況下,兩列表[ID,TEXT]。文本列有1-10個單詞短語。 300,000行。什麼是在表上運行優化,做出如此巨大的差異?
運行查詢:
SELECT * FROM row
WHERE text LIKE '%word%'
...把0.1秒。好。
因此,我創建一個第二柱,表現在有:[ID,TEXT2,TEXT2] 我製成TEXT2
= TEXT(使用UPDATE table SET TEXT2 = TEXT
]
然後我再次運行關於 '%字%' 查詢,並。它需要2.4秒
這讓我非常非常難住了,但之後不少死衚衕,我運行OPTIMIZE在桌子上,和它關係到0.2秒左右
兩個問題:
- 有沒有人知道數據結構如何在如此混亂的情況下得到自身的效果,即數據翻倍將該查詢的搜索時間增加了24倍?
- 像這樣的未索引搜索的標準是否以基礎表數據結構的速度增加而不是正在搜索的實際列中的數據?
謝謝!
有關數據庫的一些知識是,當查詢命中優化器時,它並不總是選擇與數據相同的路徑。我更熟悉Oracle(在SQL Server上少一點) - 都試圖在查詢必須與文本完全匹配的緩存中查找查詢。如果它匹配,則稱它爲軟解析,因爲解析已經完成。否則,它必須做一個硬解析,然後軟解析... – 2010-06-23 01:23:09
如果你使用通配符啓動查詢鍵,無論如何它都要進行表掃描。 – dkretz 2010-06-23 01:45:14
小馬...這是OPTOMIZE作爲清理數據的mySQL函數 - 我不是在討論如何優化實際查詢。 Dorifer ...是的,我知道它會進行全表掃描。問題依然存在。 – 2010-06-23 11:15:02