我有一个操作是sql插入。我有另一个操作是SQL选择和更新。表格大小为300K-1Million。如果我把索引,这是否意味着我的插入和更新会减慢,选择会更快。但通常select会更快,插入和更新会有多慢?一般来说,在300K-1Million的记录中,一般性能会不会提高呢?SQL性能;插入,选择和更新
回答
如果只有这样简单的生活,答案一如既往;这取决于。
想象一下你的桌子是你自己喜欢的人的“小黑书”。每个页面都有一个不同的人name
,address
,date of birth
等(图书=表,页=记录)
现在,你只希望每个人在那里一次的基础上,他们的名字和姓氏(唯一的关键,可能是主键)。但是你也希望它们在Order中,这样它们很容易查找。您决定按姓氏排序,对于姓氏相同的人,按照姓氏排序(聚集索引,它们的物理顺序,收益选择数据)
现在,聚集索引,你可以很快地在你的书中查找你的朋友。但是,如果你添加一个新的人,你不能只是把它们添加到最后,你必须找到合适的地方,他插入它们。 (插入索引的开销)
如果他们不方便地更改他们的名字(比如结婚),您必须找到他们,更改名称,并将其移动到书中的其他位置。幸运的是,索引确实使它更容易找到它们;将它们转移到书中的新地方是一件痛苦的事情,但不会像试图在随机订购的书中找到它们那样糟糕。 (索引的更新开销)
最终,有一天,当你意识到自己在记忆生日时非常糟糕。所以你转向你的小背本。不幸的是,他们是按照他们的名字命令的,而不是他们的出生日期;找出谁的生日即将到来是一个真正的痛苦!所以你在后面创建一个小索引。有序的生日列表以及当天出生的每个人的姓名。 (二级指数,根据出生日期选择福利)
如果您发现某人的出生日期错了,但是您必须改变一些事情; DoB在他们的页面上,以及在DoB索引中的位置。同样,当您为本书添加新人时,您必须找到插入这些人的正确页面,但也需要在DoB索引中添加他们的姓名。 (更新和插入开销)
幸运的是,更新他们的地址不是问题。找到他们,改变地址,然后完成。直到有一天,你创建一个地址索引以及...
总之...
1.索引可以帮助特定种类的选择性能
2.它总是增加了一个插入成本
3.可加快寻找要更新的记录
4.但是,还可以在索引字段
你指数的交易和余额取决于你使用的数据的添加开销更新。大量的插入和更新?很多选择?许多不同的选择保证倍数索引,等等?
你可以用科学做到这一切,但实际上它感觉像一门艺术。
这是一个非常好的解释。特别是在短的部分。 – user84592
我的个人经验:使用索引时速度增益巨大,更新/插入速度略有下降。
难道你不能创建一个&没有索引的测试用例吗?
这取决于您要创建的索引类型。
Clustered
索引增加选择速度(对于大数据范围非常适用),但需要更长的时间插入新行,因为每次插入新数据时都会重新排序(服务器保持物理顺序以提高数据访问速度)。 关键列的更新也会影响非聚簇索引,因此在聚簇表上创建非聚簇索引时请记住它。
创建你应该准确地做任何指数反正当,所以我想收集更多的时候统计查询其运行(SELECT
或INSERT
或UPDATE
),然后决定创建哪个索引上的列。
当表格包含与场景中行数相同的行时,索引需要达到可接受的性能。减缓插入和更新的索引开销仅在大型批次插入/更新时才引人注意;索引开销对孤立插入/更新事务的影响可以忽略不计。
- 1. SQL Server性能:删除/插入Vs选择/更新
- 2. 火鸟性能:更新/选择verus插入/选择最后的
- 3. 插入从选择性能SQL Server
- 4. 性能:插入或更新索引选择
- 5. 选择和SQL插入
- 6. 更新与插入性能
- 7. 在单个查询中插入,选择和更新 - SQL
- 8. SQL Server的性能 - 如果选择+更新与更新
- 9. SQL,选择和更新
- 10. SQL,更新和插入
- 11. SQL更新和插入
- 12. 异步插入&更新异步插入&更新:NoSql和SQL
- 13. SQL选择更新
- 14. TSQL:更新与插入选择从
- 15. MySQL选择更新并插入
- 16. 更新/插入,而不选择
- 17. 在SQL Server 2008 R2上插入并选择性能
- 18. SQL VB.net插入使用选择和值
- 19. SQL插入和选择使用JEDIS
- 20. SQL插入与选择和参数
- 21. 查询性能差异pl/sql插入和纯SQL插入
- 22. SQL选择插入选择Stement
- 23. SQL插入选择选择查询
- 24. SQL Server - 从选择查询合并插入/更新
- 25. 复杂的SQL插入更新与内部选择
- 26. T-SQL更新显着慢于选择或插入
- 27. SQL在插入期间选择并更新记录
- 28. SQL更新性能
- 29. NHibernate和MySql插入和选择,而不是更新
- 30. SQL Server的 - 插入选择
通常,这取决于您的应用程序的目的和用途。你会做更多的读取而不是写入?你有沉重的负担吗?索引通常有帮助,但是查询也需要被智能地编写,以便以一种好的方式使用这些索引。还有其他解决方案,如表分区,索引分区,集群等。 –
我在哪里可以读取这些解决方案,如表分区,索引分区,集群?这些解决方案是否适用于各种商业数据库? – user84592
我会建议查看您正在使用的数据库引擎的文档。 –