如何编写最佳SQL查询

前端之家收集整理的这篇文章主要介绍了如何编写最佳SQL查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经搜索了stackoverflow,但每个人都要求优化他们已经完成的查询.

我想知道,做什么的基本内容,创建查询时要避免什么.

例如,一个已知的事实,写入SELECT * FROM是一个要避免的事情,因为sql引擎必须做出一个“隐形”查询来知道应该显示哪些列.

也知道@min_number和@max_number之间的效果比Id> = @min_number AND Id <= @max_number更好,但是我不记得为什么.这可能是因为引擎之间是一个较低级别的句子,并创建了以“处理”方式显示注册表的迭代.但我只是不知道肯定. 有人可以验证那些,并列出最常见的做法,应该避免什么?

解决方法

我的列表是sql Server特定的(我确定是更多):

使用sargable where子句 – 这意味着没有函数特别是在其中的子句中的标量UDF

当您正在寻找与第二个表不匹配的行时,WHERE NOT EXISTS往往是比左侧连接更快的选择,其中的id为空结构.

相关的子查询往往逐行运行,可怕的速度很慢.

调用其他视图的视图无法编入索引,变得非常慢,特别是如果您在大型表中获得多个级别.

选择*是特别的,当你有一个连接,因为至少有一列被发送两次,这是浪费服务器和数据库和网络资源.

通常可以使用更快速的基于集合的逻辑来替换游标
以正确的方式存储数据时,可以避免大量的即时转换.

更新时,请确保添加了一个where子句,以便不更新新值和旧值相同的行.这可能是更新10,000,000行和更新15之间的差异.示例(@L_404_0@更新结构,如果您使用另一个数据库,则可能需要查找正确的语法,但它应该提供您的想法.):

Update t
set field1 = t2.field2
from table1 t
join table2 t2 on t.tid = t2.tid
Where t.field1 <> t2.field2

要么

Update t
set field1 = @variable
from table1 t
Where t.field1 <> @variable

如果您一直在使用字段中的函数,那么您可能无法正确存储它(或者您应该有一个持久的计算字段,并且只有在每次选择列时才进行转换).

你最好的办法是为你的数据库选择一个好的性能调优书(最好的数据库特别是数据库),并阅读有关编写查询的章节.

原文链接:https://www.f2er.com/mssql/81873.html

猜你在找的MsSQL相关文章