[英]Query performance of combined index vs. multiple single indexes vs. fulltext index
背景:我有一個包含 500 萬個地址條目的表,我想搜索不同的字段(客戶姓名、聯系人姓名、zip、城市、電話……),最多 8 個字段。 數據相當穩定,一天最多修改50次,所以幾乎只有讀權限。
用戶不應該提前告訴我他在搜索什么,我還希望支持組合搜索(搜索詞的 AND 連接)。 例如,“lincoln+lond”應在任何搜索字段中搜索包含兩個搜索詞的所有記錄,以及以任何詞開頭的條目(如本例中的“London”)。
問題:現在我需要為這個搜索表選擇一個索引策略。 (附帶說明:我正在嘗試實現亞秒級響應時間,最差響應時間應該是 2 秒。)在性能方面更好的是:
我放棄了第 1 點,因為它似乎沒有任何優勢(索引使用會受到限制,並且不會有“索引搜索”,因為並非所有字段都適合一個索引)。
問題:現在,我應該使用多個單索引變體還是應該使用 go 和全文索引? 有沒有其他方法可以實現上述功能?
兩者都試一下,看看哪個在您的系統上更快。 數據庫優化幾乎沒有硬性規定,這實際上取決於您的環境。
最初,我正要建議使用FTS ,因為它具有許多強大的性能特性。 尤其是在處理各種查詢時。 (例如 x AND y。x NEAR y 等)。
但在開始討論 FTS 的專業人士之前,我剛剛檢查了您的服務器版本 -> sql2000。
可憐的東西。 FTS 那時非常簡單,所以堅持使用多個單一索引。
我們使用 Sql2008 並且......它搖滾。
哦,順便說一句。 你知道Sql2008(免費版)里面有FTS嗎? 是否可以升級?
如果可以的話,從 sql2000 -> sql2008 開始是非常值得的。
但是,是的,堅持使用您的 MSI 選項。
我同意 Grauenwolf 的觀點,我想添加一個關於索引的注釋。 請記住,如果您使用如下語法:
SELECT field1, field2, field3
FROM table
WHERE field1 LIKE '%value%
然后在field1上搜索時無論如何都不會使用任何索引,您必須求助於全文索引。 為了完整起見,上述語法返回field1包含值的所有行(不一定在開頭)。 如果您必須搜索“包含”,則全文索引可能更合適。
回答我自己的問題:
我選擇了“多個單一索引”選項。 我最終為每個查詢的列建立了一個索引,每個索引只包含列本身。 搜索效果非常好,響應時間大多為亞秒級。 有時它需要 2-3 秒,但我將其歸因於我的數據庫服務器(具有 3GB 內存和慢速磁盤的幾年前的筆記本電腦)。
我沒有測試全文選項,因為它不再需要(而且我沒有時間去做。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.