2009-01-08 86 views
0

我有一個專門用於記錄用戶操作的數據庫。該數據庫有幾個小表,針對特定類型的行動。這些數據很少被搜索到,但表格的行數已經開始攀升至數百萬。我沒有注意到一個大的減速,但我想知道如果索引表搜索將阻礙或幫助插入的性能。插入是不斷進行的,但搜索不會經常發生,桌子也會不斷增長。索引或不索引

我應該在這些表上創建索引嗎?爲什麼或者爲什麼不?

回答

4

這一切都取決於你的實證研究。將數據庫的副本放到不同的環境中,運行分析器,同時運行搜索並插入帶和不帶索引。衡量性能,看看有什麼幫助。 :)

+0

如果您不瞭解數據庫的工作原理,這是一個好主意。但是這些系統並不是完全黑盒子。如果他隨機轉動旋鈕,組合可能需要一段時間。是否聚集或不聚,1列或多列,高基數或低,隨機數據或命令... – 2009-01-08 18:55:32

3

而不是索引,我認爲你應該考慮在你插入行的表上沒有索引,然後複製表(和可能應用索引)專門用於查詢。

2

由於Ray says,這一切都取決於情況,唯一的方法來告訴是在負載下嘗試它。

從理論角度來看:是的,向表中添加索引會減慢插入速度,因爲DBMS必須保留每個插入的所有索引。但你會注意到嗎?觀察性能會有影響嗎?也許不會。索引通常保存在B + Tree結構中,可以在O(log n)時間插入,這非常好,更不用說所有的磁盤緩存等等。所以唯一可以肯定的方法就是試試它們看看有什麼不同。

0

我不是Sql Server專家,但我曾與一位Microsoft高級工程師一起研究過我們的系統之一的性能。據他介紹,MSSS發現頁面插入新行的方式是通過「自由空間掃描」...掃描每個頁面,尋找具有插入行的空間的頁面。

如果向表格添加聚簇索引,則會強制數據在一個特定位置移動。假設您爲此表添加一個自動編號列並將其設置爲聚集索引。現在MSSS不掃描一個空閒塊,它知道999之後右移1000;所以它會對索引a進行散步。

我會給那一槍。不要花太長的時間去嘗試4到500萬行。