Sql-Server

如果數據尚未退出,則插入到表中 - 在這種情況下索引如何執行?

  • April 9, 2021

如果數據尚不存在,則當您處於將數據插入表的位置時……使用索引的最佳方法是什麼?

我在這里特別考慮 SQL Server,但我認為在其他平台上情況也一樣。

一方面,您正在向表中插入新數據,這些數據需要以一定的性能成本添加到索引中。另一方面,您正在讀取表以查看數據是否已經存在,因此索引將有助於提高性能。

我的理論是,在這種情況下擁有索引可能比沒有索引要好,因為(根據我有限的經驗)我總是發現未索引的表執行得非常糟糕,並且插入索引表會“有點慢”(顯然索引的類型會對此產生影響)。

我的簡單測試還表明,索引表(7 列中的 2 列上的聚集索引)確實提高了性能,但是我測試的表已經包含 30M 行開始(插入增加了 40-50M 行)。

我只是想知道是否有人可以提供有關此場景的任何見解以幫助我學習。謝謝

聚集索引就是表 - 因此,如果您添加的行已經排序,則無需做太多工作。非聚集索引是您必須維護的額外結構 - 因此插入、更新和刪除都會產生成本,索引越多成本越大。通常,每個表都有一些選擇(否則儲存數據的意義何在?),改進的 SELECT 性能與維護成本之間的平衡實際上只能針對您的特定工作負載來確定 - 所以測量兩次並削減一次!

引用自:https://dba.stackexchange.com/questions/289555