[英]Tell me a situation in which SQL Server indexing is not required
您能告訴我不需要在SQL Server表上建立索引的情況嗎?
我認為這是一張表,您需要在其中快速並可能以高頻率轉儲數據(例如在數據采集應用程序中,從傳感器中轉儲原始數據),以便稍后進行處理。 這是因為由於重新安排索引的開銷,索引趨於稍微降低數據插入的速度。
從技術上講,它從來不是“必需的”,但它總是一個好主意。 如果沒有聚集索引(非聚集索引需要聚集索引才能工作),那么每次訪問該表中的數據時,都必須進行表掃描以檢索信息。 如果表中的行數非常少,則索引從技術上講幾乎沒有好處。
想不出一個真正的好例子。 也許如果您有一個由於某種原因僅持有一個值的表。 無需索引該表。
如果表低於一定的行數,則執行表掃描比查找索引要快。
我不確定一個比另一個更快的確切數字。
對於諸如日志表之類的東西而言,可能不需要的地方是您在其中保存一些事件,但永遠不會引用該表中的主鍵。 如果您曾經訪問過該表,則可能是針對文本搜索的,通常無論如何都需要對表進行掃描。 盡管很容易辯稱,沒有日期/時間列的日志表什么也沒有,應該對其進行索引。
我以前的DBA告訴我,根據我們的經驗,行數少於50K的窄表不需要為從該一張表中檢索數據而建立索引,因為索引查找的開銷抵消了表掃描的開銷。
我能想到的地方,可能不需要索引的幾個例子,但我不能真的認為任何例子,你會不會想索引你的表呢。
至少您應該索引主鍵 -沒有理由不這樣做。
對於非登台表,當該表具有零(或可能只有一)行並且沒有外鍵時。 但是,如何防止有人再次添加相同的值?
否則,將臨時表清空並在一個調用中進行批量處理可能會有好處
簡而言之,您幾乎不會在任何地方都不使用索引的情況下...
我從事過ETL解決方案(Integration Serices編寫為SQL Server 2005)的工作,由於插入(而且只有插入)要花費數小時(盡管后來將數據導入到Analysis中),因此我不得不放棄很多索引。在定義了其他關系的服務多維數據集中,您可能會認為索引並沒有被放棄)。 對於某些表,折衷方案是在寫入過程之前刪除索引,然后在之后重新創建它們。 娛樂花費了很長時間,但仍然比插入同時建立索引的勢頭要快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.