我在Sql Server 2005中工作。我有一个跟踪用户操作的事件日志表,我想确保尽可能快地插入到表中。目前该表没有任何索引。添加单个非聚集索引是否会减慢插入速度?或者只是减慢插入的聚集索引?或者我应该只添加聚集索引而不用担心它?
答案 0 :(得分:6)
群集或非群集的索引将始终减慢插入速度,因为SQL必须同时维护表和索引。这种放缓是一种“绝对”的意义,你可能不会注意到它。我会添加检索数据所需的索引。
答案 1 :(得分:2)
是的,在进行INSERT, UPDATE, DELETE
操作时,任何索引都需要一点时间来保持最新状态。你拥有的指数越多,我们谈论的时间就越多。
但最终它取决于对您更重要的是什么 - 良好的查询性能(然后根据需要添加索引),或良好的插入性能(然后尽可能少的索引)。
你经常进行哪种手术?
答案 2 :(得分:0)
这是因为MySQL(和任何其他数据库引擎)中的每个二级索引都是一个单独的存储池,通常组织为某种B树。
这些存储池包含具有索引值和指向基本表记录的某种类型的指针的索引记录。对于MySQL,此指针是基表的PRIMARY KEY。
每次插入或删除记录时,这些索引存储区都会添加或删除新记录。如果您更新记录-并且UPDATE包含索引列,则相关的索引存储池也必须更新其记录。