mysql 如果写操作因为创建索引而变慢,我们应该创建列的索引吗?

ogsagwnx  于 2023-02-28  发布在  Mysql
关注(0)|答案(1)|浏览(125)

我知道,我们在列上创建索引是为了使读查询更快。
我知道,一旦我们在一列上创建了索引,写查询就会变慢,因为当插入发生时,它会更新主表,同时索引也会更新。
我有一个表quote,其中的列与entity_id, increment_id, grand_total类似,还有一些列。
我的目标列是increment_id,它保存唯一值。插入数据后,我还有一个类似select * from quote where increment_id='123'的读取查询
我的问题是我应该为increment_id列创建索引吗?报价表目前包含100K+行,并且将继续增长。

mwg9r5ms

mwg9r5ms1#

如果不创建索引,那么所显示的查询将对每个查询执行 table-scan,这将使select查询的性能非常差。
你可以决定是否要优化插入或者选择,如果你绝对需要尽可能快的插入,并且你不在乎选择是否需要很多秒,那么你可以跳过索引。
对于大多数应用程序来说,创建一个索引来帮助您的特定读取查询是一个很好的折衷方案。执行表扫描的开销非常大,并且随着行数的增加而变得更糟。插入到一个带有索引的表中的开销并不那么糟糕。
考虑到算法的复杂性,表扫描是O(n),而插入到带有索引的表中只需要向B树数据结构写入两次(该表是聚集索引,算作一次B树写入),因此您有2x O(log n)
当表的增长速度比索引写入速度快时,表扫描性能下降的速度更快。

相关问题