数据库设计,索引,存储过程和查询规划对程序性能的影响
数据库设计
有时为了获得所需的性能,减少连接运算而设计非常规数据模型是必要的,但这是最后的解决办法。
如一次数据更新增加了varchar值的长度,由于这条记录可能会跨越多页而对性能带来负面影响。
在绝对有必要的情况下才使用BLOBS
BLOBS比其它数据的处理的效率要低
索引
高度重复索引会降低性能。如果觉得有必要在包含高度重复值的列上建立索引,最好与包含唯一值(或近似唯一的其它列)建立一个复合索引,服务器仍可以使用该索引来访问重复列值,而该索引得处理效率更高。
索引的目的是为提供快速的数据访问,创建的索引要对SQL操作提供显著的性能改进,使用查询规划(Query Plan)和测试确定最佳的索引策略。
太多的索引与不充分、不正确的索引对性能都无益,在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理开支。
7.2版本之后可以反向处理索引,因此任何升序、降序索引的效果都是一样的。
考虑下面的SQL语句
select cola,colb from tab1 where cola='ABC1243';
如果colb长度较小(如整形)而cola上有索引,那么可能在cola和colb上建立复合索引会更好些,可通过读取索引项不访问整行而加快查询速度,该方法只对频繁执行的查询有使用价值。
存储过程
存储过程对强制应用逻辑十分有用,但它会导致性能下降,要避免使用只有较少语句的存储过程。
存储过程调用其它的存储过程,这些存储过程又调用其它的存储过程,这对性能是有害的。
系统不能同时进行多个涉及存储过程的查询,但可以并行执行存储过程各自的SQL语句。
规划查询
查询规划优化器(由SET EXPLAIN ON产生)对于观察SQL语句的效率是十分有用的。可以看到统计、数据分布、索引、数据分片及SQL语句等对查询性能影响的效果。注意在输出查询规划对性能有极大的影响,因此在计时或运行系统中不要用SET EXPLAIN ON。