首先算一道数学题,如果你写的一条SQL一次查询耗时100毫秒,循环100次就是10s,总耗时 = 单次耗时 × 次数。故提速从两个方面着手,一个是减少查库次数(往往能立竿见影),另一个是写出高性能的SQL。怎么写出高性能的SQL呢?
- 技巧:用
set statistics time ON
检查SQL耗时,用set statistics io ON
检查SQL所产生的读和写。把on改为off是关闭监控。 - 技巧:where条件尽量明确,尽可能减少返回的条数
set statistics time ON
SELECT TOP 1 Department FROM people WHERE AssessID=495 and Department_No='504' --2毫秒
SELECT Department FROM people WHERE AssessID=495 and Department_No='504' --37毫秒
SELECT Department FROM people WHERE Department_No='504' --61毫秒
- 技巧:能明确哪几列就不用‘*’。
/*people表全表163413 行*/
SELECT * FROM people--8295 毫秒
SELECT Department_No FROM people--80 毫秒
- 优化目标
- 1.减少 IO 次数,数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。
- 2.降低 CPU 计算,除了 IO 瓶颈之外,需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户。
CTRL+L
看查所利用的索引,表扫描次数(这两个对性能影响最大)。- 为经常查询的字段建索引!但也不能过多。insert和delete等操作会导致索引重排,增加数据库负担。