优化SQL

时间:2015-06-01 11:34:31

标签: sql-server query-performance sqlperformance

我对sql

中性能更高的哪个查询更好有疑问

选择

第一次比较:

Declare @Variable VARCHAR(MAX)<BR>
SELECT top 1 @VARIABLE = COLUMN2 FROM TABLE WHERE COLUMN1 like 'Any value'


第二次比较:

Declare @Variable varchar(MAX)
select top 1 @variable = t.column2 from table t where t.column1 like 'any value'

更新

第一次比较:
UPDATE T set column2 = 'any value' from table T where column1 = 'any value'
第二次比较:

UPDATE TABLE SET COLUMN2 = 'any value' where column 1 = 'any value'

删除

第一次比较:

delete t
from table t
where column1 = 'any value'


第二次比较

delete from table where column1 = 'any value'

我只是需要您对哪个查询更好的看法,如果有更好的方法来优化我的查询效果,有人可以告诉我它是怎么回事吗?

2 个答案:

答案 0 :(得分:2)

比较与性能无关。

几乎所有时间sql performance都与查找有关。换句话说,sql数据库可以检索多快的数据。在其他时候,它是关于你插入删除的速度。

那么,如何让sql server快速执行? 通过使查找更快地执行并通过提供索引来实现,类似于任何书中的索引,索引可以帮助您快速查找章节。

因此,在您的查询中,如果为index创建column1而不是sql数据库,则可以快速搜索索引中的值并使选择更新删除查询运行得更快。

拥有别名只会使您的代码可读。它与性能无关。

答案 1 :(得分:0)

您发布的比较下的查询仅在编写它们的语法上有所不同。两个查询的性能都没有任何不同。语法解析器将为这些查询生成相同的语法树。

您可以将其视为

int sum = y + x;

也可以写成

   sum
  -   -
x       y

它们的语法树将是

no of records 5000, key column is Age with data type as byte i.e. 1 byte
total size = 5000 bytes i.e. not even 1 page - Indexes won't be useful.

no of records 5000, key column is money i.e. 8 bytes
total size = 5000 * 8bytes = 40000 bytes = 40000/8Kb = 5 pages (1 page = 8 kb)
Index won't be very helpful

no of records 50000, key column is byte i.e. 
50000 bytes = 7 pages, index won't be very helpful

no of records 50000, key column is bigint i.e.
(50000*8bytes)/8Kb = 50 pages, index can be help up to some extent.

no of records 500000, key column is bigint i.e.
(500000*8bytes)/8Kb = 500 pages, index is most likely to be helpful depending upon your search arguments.

只有通过索引,为表格收集的统计数据才能观察到性能差异。

有关索引的一些亮点

  1. 索引与表中不存在的记录无关,而是将索引性能分类的更好参数是行的大小。

  2. 表中的
  3. (SizeOfKey属性x noofrecords)是决定是否使用索引的更好参数

  4. e.g。

    {{1}}