AJ.*_*AJ. 114
这是一个方便的花花公子列表,我总是给一些问我优化的人.
我们主要使用Sybase,但大多数建议都将全面适用.  
例如,SQL Server附带了许多性能监视/调整位,但是如果你没有这样的东西(甚至可能没有),那么我会考虑以下内容......
我看到的99%的问题是由于在连接中放入太多表而造成的.对此的修复是执行连接的一半(使用某些表)并将结果缓存到临时表中.然后在该临时表上继续查询的其余部分.
#temp表可能比@table具有大量(数千行)的变量执行得更好.Mar*_*ett 19
jas*_*ldo 18
稍微偏离主题,但如果您可以控制这些问题...... 
高水平和高影响.
小智 8
CREATE INDEX
确保您WHERE和JOIN条款可以使用索引.这将大大加快数据访问速度.
如果您的环境是数据集市或仓库,那么几乎任何可以想象的查询都应该有很多索引.
在事务环境中,索引的数量应该更低,并且它们的定义更具战略性,以便索引维护不会拖累资源.(索引维护是指必须更改索引的叶子以反映基础表的更改,如INSERT, UPDATE,和DELETE操作一样.)
另外,要注意索引中字段的顺序 - 字段越具有选择性(更高基数),它应该出现在索引中越早.例如,假设您要查询二手车:
SELECT   i.make, i.model, i.price
FROM     dbo.inventory i
WHERE    i.color = 'red'
  AND    i.price BETWEEN 15000 AND 18000
价格通常具有较高的基数.可能只有几十种颜色可供使用,但很可能有数千种不同的要价.
在这些索引选择中,idx01提供了更快的路径来满足查询:
CREATE INDEX idx01 ON dbo.inventory (price, color)
CREATE INDEX idx02 ON dbo.inventory (color, price)
这是因为与颜色选择相比,更少的汽车将满足价格点,从而使查询引擎能够分析更少的数据.
我已经知道有两个非常相似的索引,仅在字段顺序上有所不同,以加快一个中的查询(名字,姓氏)和另一个中的(姓氏,名字).
我最近学到的一个技巧是SQL Server可以在更新语句中更新局部变量和字段.
UPDATE table
SET @variable = column = @variable + otherColumn
或者更易阅读的版本:
UPDATE table
SET
    @variable = @variable + otherColumn,
    column = @variable
我在实现递归计算时使用它来替换复杂的游标/连接,并且还获得了很多性能.
以下是详细信息和示例代码,这些代码在性能方面取得了很大的进步:http: //geekswithblogs.net/Rhames/archive/2008/10/28/calculating-running-totals-in-sql-server-2005---the-optimal. ASPX
假设MySQL在这里,使用EXPLAIN来查找查询的内容,确保尽可能高效地使用索引并尝试消除文件排序.高性能MySQL:优化,备份,复制等是与MySQL性能博客一样的关于此主题的好书.
查看 where 子句 - 验证索引的使用/验证没有做任何愚蠢的事情
where SomeComplicatedFunctionOf(table.Column) = @param --silly
| 归档时间: | 
 | 
| 查看次数: | 37937 次 | 
| 最近记录: |