数据库设计,索引,数据库存储过程和查询规划对程序性能的影响
时间:2007-12-23 来源:不详 作者:迈克DB
为性能而改变常规设计
有时为了获得所需的性能,减少连接运算而设计非常规数据模型是必要的,但这是最后的解决办法。
保证记录的长度较小,当然要小于一个Online页的大小
跨越多页的长记录对性能无益
varchars是有上下边界的字符串
有效地减少存储空间
如一次数据更新增加了varchar值的长度,由于这条记录可能会跨越多页而对性能带来负面影响。
在绝对有必要的情况下才使用BLOBS
BLOBS比其它数据的处理的效率要低
索引
避免高度重复索引
高度重复索引会降低性能。假如觉得有必要在包含高度重复值的列上建立索引,最好与包含唯一值(或近似唯一的其它列)建立一个复合索引,服务器仍可以使用该索引来访问重复列值,而该索引得处理效率更高。
精心选择索引
索引的目的是为提供快速的数据访问,创建的索引要对SQL操作提供显著的性能改进,使用查询规划(QueryPlan)和测试确定最佳的索引策略。
不要建立过多的索引
太多的索引与不充分、不正确的索引对性能都无益,在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理开支。 dedecms.com
7.2版本之后可以反向处理索引,因此任何升序、降序索引的效果都是一样的。对插入操作,使用FILLFACTOR控制索引页中的空间
优化器按照索引建立顺序选择索引。例如:colA列上建立索引的表和colA,colB,colC上建立的另一个索引效果都是一样的,即对colA过滤时将使用首先建立的索引,而不一定使用最佳索引。
只在读/扫描时使用索引
考虑下面的SQL语句
selectcola,colbfromtab1wherecola='ABC1243';
假如colb长度较小(如整形)而cola上有索引,那么可能在cola和colb上建立复合索引会更好些,可通过读取索引项不访问整行而加快查询速度,该方法只对频繁执行的查询有使用价值。
存储过程
可以减少客户机/服务器间的通信量
通过将复杂的应用逻辑交送给服务器,使用存储过程可以减少客户机/服务器间通信量(当然这将增加服务器的运行开支)
避免小的存储过程
存储过程对强制应用逻辑十分有用,但它会导致性能下降,要避免使用只有较少语句的存储过程。
避免嵌套的、递归的存储过程
存储过程调用其它的存储过程,这些存储过程又调用其它的存储过程,这对性能是有害的。
存储过程可以明显减少系统并行查询的能力 内容来自dedecms
系统不能同时进行多个涉及存储过程的查询,但可以并行执行存储过程各自的SQL语句。
每行的检测中,where子句表达式中的存储过程都会被计算。
规划查询
查询规划优化器(由SETEXPLAINON产生)对于观察SQL语句的效率是十分有用的。可以看到统计、数据分布、索引、数据分片及SQL语句等对查询性能影响的效果。注重在输出查询规划对性能有极大的影响,因此在计时或运行系统中不要用SETEXPLAINON。 asp?tags=库设计">库设计asp?tags=索引">索引asp">存储过程asp?tags=数据库">数据库
文章评论
共有位Admini5网友发表了评论 查看完整内容