2010-11-17 79 views
1

我的意思是:具有20列的表格是否比只有4列的表格有更多的索引特定字段(用於搜索ish查詢)的好處?數據庫索引 - 表的大小是否重要?

另請參見:將索引添加到字段中有什麼危害,我不會搜索太多,但可能在以後的將來?添加索引是否有負面影響?它只是它在磁盤上佔用的大小,還是它可以讓事情運行得更慢以添加不必要的索引?

從評論

我使用的是Postgres(最新版本)中提取,我有一個表,我會做很多喜歡類型的查詢等,但價值無疑會因爲經常改變我的客戶可以訪問CRUD。我應該可以創建索引嗎?他們只是頭痛嗎?

回答

5

與只有4列的表相比,索引某個字段(在搜索ish查詢中使用的字段)有20列的表是否受益更多?

不,表中的列數與索引的好處沒有關係。

索引僅指定列中的值;它會影響你的查詢會看到多少好處的值的頻率。例如,包含布爾值的列對索引來說是一個糟糕的選擇,因爲這個值是一個或另一個值的50/50。在所有行上以50/50分割時,索引不會縮小搜索特定行的範圍。

將索引添加到字段中會帶來什麼樣的危害,我不會搜索得太多,但可能會在以後出現?

索引只有在可以使用時才加快數據檢索速度,但是它們會對INSERT/UPDATE/DELETE語句的速度產生負面影響。索引還需要維護以保持其價值。

+0

@OMG小馬 - 感謝...拍攝。什麼樣的維護,以及多久? – orokusaki 2010-11-17 05:26:15

+0

@orokusaki:取決於數據庫以及索引所在列的數據更改頻率。 – 2010-11-17 05:27:22

+2

嗯,我會說「最小」而不是「沒有」,更依賴於行的大小而不是列數(儘管後者影響前者)。對於較大的行,您的全表掃描將無法像讀取行一樣讀取儘可能多的行(例如)只包含單列的行。因此,對於行大小爲50K的表而言,索引該列的_improvement_大於具有10K行大小的行。正如你正確指出的那樣,這種差異會被其他因素所淹沒。 – paxdiablo 2010-11-17 05:32:17

1

如果您正在進行LIKE查詢,您可能會發現索引無論如何不是很有幫助。雖然指數可能會提高此查詢...

select * from t23 
where whatever like 'SOMETHING%' 
/

...這是不可能的指數將與這兩種查詢的幫助......

select * from t23 
where whatever like '%SOMETHING%' 
/

select * from t23 
where whatever like '%SOMETHING' 
/

如果你有自由文本字段和你的用戶需要模糊匹配,那麼你應該看看Postgres的全文功能。這使用MATCH運算符而不是LIKE,它需要一個特殊的索引類型。 Find out more.

有一個問題,那就是全文索引比正常指標更復雜,而且related design decisions are not simple。還有一些實現需要additional maintenance activities

+0

爲什麼第一個查詢會加快,但不是第二個或第三個查詢?我認爲數據庫會以相同的方式執行「like」搜索,但能夠從索引值中進行搜索,而不是掃描整個表格,對所有3個查詢基本上具有相同的效果(這是我的誤解,當然,但我不知道爲什麼或如何)。我想我不明白指數如何加快速度。 – orokusaki 2010-11-17 19:26:19

+0

@orokusaki在電話簿中查找以'iith'結尾的內容還是以'Smi'開頭的內容?由於第一個字母未知,後面的兩個示例不能使用索引。應避免這些類型的查詢。 – HLGEM 2010-11-17 21:48:25

+0

@HLGEM - 不要質疑你在這個問題上的權威,但這似乎不是一個有效的比較。首先,一個表格的數據不是按字母順序排列的。其次,人類不容易掃描電話簿中每個姓名的最後3個字符,而數據庫可以掃描列數據的數據'data [length - 3] - data [length]'的最後3個字符似乎是一個好方法把它(來自非DBA)。 – orokusaki 2010-11-21 02:43:03

相關問題