简单的列出提高sql数据库性能的方法:
1.数据库调整和sql语句调整
数据库调整:是调整实际数据库的过程,包括分配内存,磁盘,CPU,I/O 和底层数据库进程,还涉及数据库结构本身的管理与操作。数据库调整通常会包括调整数据库体系来优化硬件的使用。其目标是确保数据库的设计能够最好的满足用户对数据库操作的需要。
sql调整是调整访问数据库的sql语句,这些语句包含数据库查询和事务操作,比如插入更新删除。sql语句调整的目标是利用数据库和系统资源,索引,针对数据库的当前状态进行最有效的访问,从而减少对数据执行查询所需要的开销。简单来说,sql语句调整是优化生成sql语句的过程,从而已最有效的和最高效的方式获得结果。
两者缺一不可。
2.格式化sql语句
1)提高可读性格式化sql语句。值得提出的是,当语句里使用多个表时,使用表的别名。
下面是一个可读性很差的语句:
SELECT CUSTOMER_TBL.CUST_ID,CUSTOMER_TBL.CUST_NAME,
CUSTOMER_TBL.CUST_PHONE,ORDERS_TBL.ORD_NUM,ORDERS_TBL.QTY
FROM CUSTOMER_TBL,ORDERS_TBL
WHERE CUSTOMER_TBL.CUST_ID=ORDERS_TBL.CUST_ID
AND ORDERS_TBL.QTY>1 AND CUSTOMER_TBL.CUST_NAME LIKE 'G%'
ORDER BY CUSTOMER_TBL.CUST_NAME;
格式化之后:
SELECT C.CUST_ID,
C.CUST_NAME,
C.CUST_PHONE,
O.ORD_NUM,
O.QTY
FROM CUSTOMER_TBL C,
ORDERS_TBL O
WHERE C.CUST_ID=O.CUST_ID
AND O.QTY>1
AND C.CUST_NAME LIKE 'G%'
ORDER BY C.CUST_NAME;
虽然提高语句的可读性并不会直接改善他的性能,但这样会帮助我们更方便的修改和调整很长和很复杂的语句。
2)FROM 子句里的表
FROM自己里的表的安排或次序对性能有很大的影响,取决于优化器Ruhr读取sql语句。举例来说,把较小的表列在前面,较大的表列在后面就会获得更好的性能。
FROM SMALLEST TABLE
LARGEST TABLE
3)结合条件的次序
大多数结合使用一个基表链接到具有一个或多个共有字段的其他表。在WHERE子句里,来自基表的字段一般放在结合操作的右侧,要被结合的通常按照表从小到大的次序排列。结合条件应该位于WHERE子句的最前面,其后才是过滤条件。
FROM TABLE1, --Smallest table
TABLE2, --to
TABLE3 --Largest table,also base table
WHERE TABLE1.COLUMN=TABLE3.COLUMN
AND TABLE2.COLUMN=TABLE3.COLUMN
[AND CONDITION1]
[AND CONDITION2]
由于结合通常会从表里返回大部分数据,所以结合条件勇敢在更严格的条件再生效。
我们应该让sql优化器首先计算最严格的条件,因为它会返回最小的数据子集,从而减小查询的开销。最好使用具有索引的字段作为查询里最严格的条件。
3.使用LIKE操作符和通配符
SELECT EMP_ID,
LAST_NAME,
FIRST_NAME,
STATE
FROM EMPLOYEE_TBL
WHERE LAST_NAME LIKE '%TEVENS';
4.避免OR操作符
再sql语句里用谓词IN代替OR操作符能够提高检索速度。
5.避免使用HAVING子句
6.避免大规模排序操作
由于大规模的排序操作不是总是可以避免的,所以最好好大规模排序放在批处理过程里,再数据库使用的非繁忙期运行。
7.使用存储过程
我们可以为经常运行的sql语句(特别是大型事务或查询)创建存储过程。所谓存储过程,就是经过编译的、以可执行格式永保存在数据库里的sql语句。
8.在批加载时关闭索引
在批加载时,索引可能会严重的降低性能。在加载的过程中关闭索引,对表所做的的修改会在更短的时间内完成,整个操作也会更快的完成,在加载之后可以重新创建索引。 在加载的操作的前后删除并创建索引还有一个优点,就是可以减少索引里面的碎片。