Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL性能;插入、选择和更新_Sql_Performance - Fatal编程技术网

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

SQL性能;插入、选择和更新,sql,performance,Sql,Performance,我有一个操作是sql插入。我还有一个操作是sql选择和更新。表大小为300K-100万。若我放置索引,这是否意味着我的插入和更新会变慢,选择会更快。但通常选择的速度有多快,插入和更新的速度有多慢?一般来说,有30-100万条记录,总体性能是否会提高?我的个人经验:使用索引时速度大幅提高,更新/插入速度略有下降 你不能创建一个有索引和没有索引的测试用例吗?这取决于你要创建的索引类型 Clustered索引提高了选择速度(非常适合大数据范围),但插入新行需要更长的时间,因为每次插入新数据时都会进行重

我有一个操作是sql插入。我还有一个操作是sql选择和更新。表大小为300K-100万。若我放置索引,这是否意味着我的插入和更新会变慢,选择会更快。但通常选择的速度有多快,插入和更新的速度有多慢?一般来说,有30-100万条记录,总体性能是否会提高?

我的个人经验:使用索引时速度大幅提高,更新/插入速度略有下降


你不能创建一个有索引和没有索引的测试用例吗?

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

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


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

当表包含的行数与场景中的行数相同时,需要索引才能在所选列上实现可接受的性能。降低插入和更新速度的索引开销只有在大批量插入/更新时才明显;索引开销对独立插入/更新事务的影响可以忽略不计

如果生活真的那么简单,答案一如既往;视情况而定

把你的桌子想象成你喜欢的人的“小黑皮书”。每页都有不同的人
姓名
地址
出生日期
,等等(书=表,页=记录)

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

现在,有了这个聚集索引,你可以很快在书中找到你的朋友。但是,如果你添加了一个新的人物,你不能只是将他们添加到结尾,你必须在书中找到合适的地方插入他们。(插入索引的开销)

如果他们无意中改变了自己的名字(比如结婚),你必须找到他们,改变名字,然后把他们转移到书中的其他地方。不过幸运的是,索引确实让我们更容易找到它们;把它们放到书中的一个新地方是一件痛苦的事,但比在一本随机排列的书中找到它们还糟糕。(索引的更新开销)

最终,总有一天,你会意识到自己在记住生日方面很糟糕。所以你转向你的小本子。不幸的是,他们是按姓名排序的,而不是按出生日期排序的;弄清楚谁的生日快到了真是一件痛苦的事!因此,在后面创建一个小索引;一份有序的生日清单和当天出生的每个人的名字。(二级索引,根据出生日期选择福利)

然而,如果你发现某人的出生日期错了,你必须改变现状;页面上的DoB以及在DoB索引中的位置。同样,当你向书中添加一个新人时,你必须找到合适的页面来插入他们,而且还要在DoB索引中找到合适的位置来添加他们的名字。(更新并插入间接费用)

幸运的是,更新他们的地址不是问题。只要找到他们,改变地址,你的工作就完成了。直到有一天你也创建了地址索引


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

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


你可以用科学来完成这一切,但在实践中,这就像一门艺术。

一般来说,这取决于你的应用程序的目的和用途。你读的比写的多吗?你的行李重吗?索引通常会有所帮助,但查询也需要智能地编写,以便以良好的方式使用这些索引。还有其他解决方案,如表分区、索引分区、集群等。我在哪里可以阅读这些解决方案,如表分区、索引分区、集群?这些解决方案适用于所有类型的商业数据库吗?我建议您查看您正在使用的数据库引擎的文档。这是一个非常好的解释。特别是在简短的部分。