SQL性能;插入,选择和更新

时间:2011-07-22 11:29:53

标签: sql performance

我有一个操作是sql插入。我有另一个操作是sql选择和更新。表大小为300K-1Million。如果我放入索引,这是否意味着我的插入和更新会变慢,选择会更快。但通常选择的速度有多快,插入和更新的速度会有多慢?一般来说,有300K-1M0000的记录,一般表现是否会增强?

4 个答案:

答案 0 :(得分:2)

我的个人经验:使用索引时速度极快,更新/插入速度小幅下降。

你不能用&创建一个测试用例。没有索引?

答案 1 :(得分:1)

这取决于您要创建的索引类型。

Clustered索引提高了选择速度(非常适合大数据范围)但插入新行需要更长时间,因为每次插入新数据时都会进行重新排序(服务器会保持物理上的命令以提高数据访问速度)。 更新键列也会影响非聚簇索引,因此在聚簇表上创建非聚簇索引时请记住这一点。

无论如何,在创建任何索引时,您应该准确地执行此操作,因此我希望收集更频繁查询的统计信息(SELECTINSERTUPDATE),然后决定要在哪个列上创建的索引。

答案 2 :(得分:1)

当表包含与场景中的行数相同的行时,索引必须在选择上实现可接受的性能。减慢插入和更新的索引开销仅在大型批量插入/更新时才会显着;索引开销对隔离插入/更新事务的影响可以忽略不计。

答案 3 :(得分:1)

如果只有生活那么简单,答案一如既往;这取决于。

想象一下你的桌子就像你自己喜欢的“小黑书”。每个页面都有不同的人nameaddressdate of birth等。(Book = Table,Page = Record)

现在,根据他们的名字和姓氏(唯一键,可能是主键),你只希望每个人在那里一次。但是你也希望它们在订单中,以便它们易于查找。您决定按姓氏排序,对于姓氏相同的人,请按名字排序(Clustered Indexed,存储它们的物理顺序,选择数据)

现在,通过该聚集索引,您可以在书中快速查找好友。但是如果你添加一个新人,你不能只是将它们添加到最后,你必须在书中找到正确的位置来插入它们。 (插入索引的开销)

如果他们不方便地改变他们的名字(比如结婚),你必须找到他们,更改名称,然后将他们移到书中的其他地方。幸运的是,索引确实让它更容易找到它们;将它们移到书中的新位置是一件痛苦的事,但并不像在随机订购的书中找到它们那么糟糕。 (更新索引的开销)

最终,有一天你意识到你很难忘记生日。所以你转向你的小书。不幸的是,他们按照他们的名字命名,而不是他们的出生日期;找出谁的生日即将到来是一个真正的痛苦!所以你在后面创建一个小索引;生日的有序列表以及当天出生的每个人的姓名。 (二级指数,福利根据出生日期选择)

如果你发现某人的出生日期是错的,那么你必须改变一些事情;页面上的DoB,以及DoB索引中的位置。同样,当您向书中添加新人时,您必须找到插入它们的正确页面,但也需要在DoB索引中添加其名称的正确位置。 (更新和插入开销)

幸运的是,更新他们的地址不是问题。只需找到它们,更改地址,就完成了。直到那一天你也创建了一个地址索引......


简而言之......
1.索引可以帮助特定种类的选择性能 2.它总是增加插入成本
3.它可以加快查找更新记录 4.但也可以为索引字段上的更新添加开销

索引的交易和余额取决于您对数据的使用。大量的插入和更新?很多选择?许多不同的选择保证多重索引等?

你可以用科学来做到这一切,但在实践中它感觉就像一门艺术。