问题:SQL调优是每个GAOIT的人都要具备的基本知识,不多说,下面主要介绍下主要从哪些地方进行优化吧!
一、硬件优化
1、在服务器上不要安装与 VA 程序任何无相关的软件,甚至一些与 VA 运行 无关的服务都可以停掉。一般只安装 SQL 数据库、VA 服务端服务及杀毒 软件
2、杀毒软件不要对数据库的文件进行扫描(MDF/LDF),会很慢
3、定时对磁盘进行扫描和磁盘整理,减少系统文件错误及减少磁盘碎片, 进行磁盘整理时最好不要使用 WINDOWS 本般的扫描功能(扫描之前一定 要对数据库作异地备份
4、可以考虑设置增大磁盘的缓存区,减少对磁盘的读写次数
5、升级硬件,整机使用更高配置的硬件。或者可以单独增加 CPU 个数、增 大内存等。
6、提高带宽
二、SQL优化
1、尽量使事务处理达到最短,如果事务太长最好按功能将事务分开执行 (如:可以让用户在界面上多几步操作)。事务太长很容易造成数据库阻塞, 用户操作速度变慢或死机情况。
2、尽量减少与数据库的交互次数。如果在前端程序写有循球访问数据库操 作,最好写成将数据一次读到前端再进行处理或者写成存储过程在数据库 端直接处理。
3、不要使用 SELECT *这样的语句
4、尽量避免使用游标, 它占用大量的资源,。如果需要 row-by-row 地执行,尽量采用非光标技术,如:在客户端循环,用临时表,Table 变量,用子查询,用 Case 语句等等。 如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。
5、EXISTS 要远比 IN 的效率高。里面关系到 full table scan 和 range scan。 几乎将所有的 IN 操作符子查询改写为使用 EXISTS 的子查询。
6、注意表之间连接的数据类型,避免不同类型数据之间的连接。
7、尽量少用视图(对视图操作比直接对表操作慢,可以用 stored procedure 来代替她。特别的 是不要用视图嵌套,嵌套视图增加了寻找原始资料的难度。我们看视图的本 质:它是存放在服务器上的被优化好了的已经产生了查询规划的 SQL。对 单个表检索数据时,不要使用指向多个表的视图,直接从表检索或者仅仅 包含这个表的视图上读,否则增加了不必要的开销,查询受到干扰)
8、避免相关子查询(如果子查询不可避免,那么要 在子查询中过滤掉尽可能多的行。)
9、Between 在某些时候比 IN 速度更快(ex:Between 能够更快地根据索引找到范围。用查询优化器可见到差别。 select * from chineseresume where title in (' 男 ',' 女 ') Select * from chineseresume where between '男' and '女' 是一样的。由于 in 会在比较多次, 所以有时会慢些。)
10、对 Where 条件字段修饰字段移到右边
11、在海量查询时尽量少用格式转换。
12、IS NULL 与 IS NOT NULL (不能用 null 作索引,任何包含 null 值的列都将不会被包含在索引中。 即使索引有多列这样的情况下,只要这些列中有一列含有 null,该列就会 从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提 高性能。任何在 where 子句中使用 is null 或 is not null 的语句优化器是不允 许使用索引的。)
13、WHERE 条件顺序尽量把索引字段放在前面(主键的唯一性最高),复合 索引字段顺序与 where 条件顺序保持一致。Sql 自动查找使用那个索引。
14、外键关联的列应该建立索引
16、注意 UNion 和`UNion all 的区别(UNION all 执行效率高)
☛各位同行,以上仅供参考,有误或者还有什么方法尽管提出来呀,谢谢!