如何编写最佳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之间的差异.示例(Tsql更新结构,如果您使用另一个数据库,则可能需要查找正确的语法,但它应该提供您的想法.): 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 如果您一直在使用字段中的函数,那么您可能无法正确存储它(或者您应该有一个持久的计算字段,并且只有在每次选择列时才进行转换). 你最好的办法是为你的数据库选择一个好的性能调优书(最好的数据库特别是数据库),并阅读有关编写查询的章节. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |