数据库知识学习,数据库设计优化攻略(四)

2021-12-13 17:04:41 浏览数 (1)

1.4.7 尽量使用索引

建立索引后,并不是每个查询都会使用索引,在使用索引的情况下,索引的使用效率也会有很大的差别。只要我们在

查询语句中没有强制指定索引,索引的选择和使用方法是 SQLSERVER 的优化器自动作的选择,而它选择的根据是查询语句的

条件以及相关表的统计信息,这就要求我们在写 SQL 语句的时候尽量使得优化器可以使用索引。

为了使得优化器能高效使用索引,写语句的时候应该注意:

➢ 不要对索引字段进行运算,而要想办法做变换,比如

➢ 不要对索引字段进行格式转换

➢ 不要对索引字段使用函数

WHERE LEFT(NAME, 3)=’ABC’ 或者 WHERE SUBSTRING(NAME,1, 3)=’ABC’

➢ 不要对索引字段进行多字段连接

1.4.8 注意连接条件的写法

多表连接的连接条件对索引的选择有着重要的意义,所以我们在写连接条件条件的时候需要特别的注意。

➢ 多表连接的时候,连接条件必须写全,宁可重复,不要缺漏。

➢ 连接条件尽量使用聚集索引

➢ 注意 ON 部分条件和 WHERE 部分条件的区别

1.4.9 其他需要注意的地方

经验表明,问题发现的越早解决的成本越低,很多性能问题可以在编码阶段就发现,为了提早发现性能问题,需要

注意:

➢ 程序员注意、关心各表的数据量。

➢ 编码过程和单元测试过程尽量用数据量较大的数据库测试,最好能用实际数据测试。

➢ 每个 SQL 语句尽量简单

➢ 不要频繁更新有触发器的表的数据

➢ 注意数据库函数的限制以及其性能

1.4.10 学会分辩 SQL 语句的优劣

自己分辨 SQL 语句的优劣非常重要,只有自己能分辨优劣才能写出高效的语句。

➢ 查看 SQL 语句的执行计划,可以在查询分析其使用 CTRL L 图形化的显示执行计划,一般应该注意百分比最大的几个图

形的属性,把鼠标移动到其上面会显示这个图形的属性,需要注意预计成本的数据,也要注意其标题,一般都是

CLUSTERED INDEX SEEK 、INDEX SEEK 、CLUSTERED INDEX SCAN 、INDEX SCAN 、TABLE SCAN 等,其中出现 SCAN 说

明语句有优化的余地。也可以用语句 SET SHOWPLAN_ALL ON 要执行的语句 SET SHOWPLAN_ALL OFF 查看执行计划

的文本详细信息。

➢ 用事件探查器跟踪系统的运行,可疑跟踪到执行的语句,以及所用的时间,CPU 用量以及 IO 数据,从而分析语句的效率。

➢ 可以用 WINDOWS 的系统性能检测器,关注 CPU、IO 参数

1.5 测试、运行、维护阶段

测试的主要任务是发现并修改系统的问题,其中性能问题也是一个重要的方面。重点应该放在发现有性能问题

的地方,并进行必要的优化。主要进行语句优化、索引优化等。

试运行和维护阶段是在实际的环境下运行系统,发现的问题范围更广,可能涉及操作系统、网络以及多用户并

发环境出现的问题,其优化也扩展到操作系统、网络以及数据库物理存储的优化。

这个阶段的优花方法在这里不再展开,只说明下索引维护的方法:

➢ 可以用 DBCC DBREINDEX 语句或者 SQL SERVER 维护计划设定定时进行索引重建,索引重建的目的是提高索引的效能。

➢ 可以用语句 UPDATE STATISTICS 或者 SQL SERVER 维护计划设定定时进行索引统计信息的更新,其目的是使得统

计信息更能反映实际情况,从而使得优化器选择更合适的索引。

➢ 可以用 DBCC CHECKDB 或者 DBCC CHECKTABLE 语句检查数据库表和索引是否有问题,这两个语句也能修复一般的问题。

0 人点赞