我知道,我们在列上创建索引是为了使读查询更快。
我知道,一旦我们在一列上创建了索引,写查询就会变慢,因为当插入发生时,它会更新主表,同时索引也会更新。
我有一个表quote
,其中的列与entity_id, increment_id, grand_total
类似,还有一些列。
我的目标列是increment_id
,它保存唯一值。插入数据后,我还有一个类似select * from quote where increment_id='123'
的读取查询
我的问题是我应该为increment_id
列创建索引吗?报价表目前包含100K+行,并且将继续增长。
1条答案
按热度按时间mwg9r5ms1#
如果不创建索引,那么所显示的查询将对每个查询执行 table-scan,这将使
select
查询的性能非常差。你可以决定是否要优化插入或者选择,如果你绝对需要尽可能快的插入,并且你不在乎选择是否需要很多秒,那么你可以跳过索引。
对于大多数应用程序来说,创建一个索引来帮助您的特定读取查询是一个很好的折衷方案。执行表扫描的开销非常大,并且随着行数的增加而变得更糟。插入到一个带有索引的表中的开销并不那么糟糕。
考虑到算法的复杂性,表扫描是
O(n)
,而插入到带有索引的表中只需要向B树数据结构写入两次(该表是聚集索引,算作一次B树写入),因此您有2xO(log n)
。当表的增长速度比索引写入速度快时,表扫描性能下降的速度更快。