2013-02-11 63 views
0

應該在表上使用哪種類型的索引?它最初被插入(一個月一個)到一個空表中。然後我在兩列上放置一個非聚集的複合索引。想知道如果將兩個字段合併爲一個字段會在搜索時提高性能。或者沒有關係?我應該使用具有主鍵聚集索引的標識列嗎?在一張擁有超過2億行的表中搜索記錄

回答

0

您應該在人們查詢表格時將最有可能在where子句中使用的字段編入索引。不要擔心主鍵 - 它已經有一個索引。

0

如果你可以定義查詢表時,可以使用一個唯一的主鍵,這將被用來作爲聚集索引,將是最快的選擇。

如果您的選擇查詢必須使用您提到的兩個字段,請將它們分開。性能不會受到影響,架構也不會受到影響。

0

「對於經常搜索值範圍的列,聚簇索引特別有效,在使用聚簇索引找到具有第一個值的行後,具有後續索引值的行保證在物理上相鄰。

考慮到這一點,除非它對您的應用程序有商業意義,否則在您的主鍵(ID)上擁有聚簇索引可能不會看到很多好處。如果你有一個日期值,你通常查詢,那麼它可能更有意義,一個聚集索引添加到

select * from table where created > '2013-01-01' and created < '2013-02-01' 

我見過datawarehouses使用級聯的重要途徑。這是否適用於您取決於您​​的疑問。很顯然,查詢單個字段值的速度會比多個字段更快,特別是當B樹索引中查找少一個時。

或者,如果你有一個表200萬行,你可以看一下打破了數據輸出到多個表,如果它是有道理這樣做。

你是說你每個月都加載所有這些數據,所以我必須假設所有的數據都是相關的。如果表中的數據被認爲是「舊」且與搜索無關,則可以將數據移出到歸檔表(使用相同的模式),以便您的查詢僅針對「當前」數據運行。

否則,你可以看看分片的方法,就像MongoDB一樣使用NoSQL。如果MongoDB不是一個選項,那麼可以在應用程序中實現與邏輯相同的分片鍵。我懷疑你的數據庫SQL驅動程序本身會支持分片。

相關問題