怎样才能提高数据库的性能?

xtjack 2000-08-18 12:35:00
1、我想可以是改善sql语句
2、养成建立索引的习惯
3、其他呢?你们认为呢?
...全文
339 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
w102272 2000-08-19
  • 打赏
  • 举报
回复
1、使你的数据库结构规范化,但是不要求一定达到第三范式,为了显示和打印目的可以有
数据冗余
2、评估你的系统中对性能影响的关键处,减少被频繁访问的核心表的数量,并在这些核心
表上重点优化索引,表结构(尽量紧凑)。典型的核心表是代码表。
3、对于统计类应用,如果可能应写成触发器和存储过程,这样就有可能把一个消耗大量时
间的统计运算分布到每INSERT,DELETE,或者UPDATE来处理,从而极大提高查询类操作
的速度。
4、明智地选择把什么字段包含进群聚索引,或者非群居索引。对于数据按群居键值分布的
查询选择群居索引最有效。其他索引也要针对业务进行选择。由于维护索引也要消耗系
统资源和时间,所以过多的索引对性能是损害甚至是毫无效果的。
5、如果可能,可以利用大数据库对SQL的一些特殊规定来进一步优化,比如查询暗示。
6、适当选择硬件,综合考虑CPU,内存,I/O系统的性能,以当前的CPU,内存配置来看,
很多数据库系统的瓶颈出在I/O系统上。所以如果有可能,最好使用RAID。
当然如果你有足够的财力,可以买更好的服务器,或者搞服务器集群就更利害啦。
7、可能的话,尽量使用存储过程,因为存储过程的执行计划可以重复使用,而且不需要
象普通由CLIENT提交的SQL那样进行处理和编译。
8、检查你的应用程序设计,如果有可能,尽量减少查询次数和在网络上往返的数据。为了
获取少量字段而写SELECT * 对性能的损害也比较利害。
9、在应用程序中协调并发和一致性之间的矛盾。并不是所有业务都需要放在事务中。大量
业务是允许脏读的,在不关键事务中使用脏读,或者读提交,可以大大降低DEADLOCK和
进程之间彼此等待的机会,从而把由于互相锁定资源引起的等待降低到最小。
不要在事务执行中进行大量计算或者与用户交互的操作,因为事务的执行在要求上是
不允许被打断的原子操作(回滚是失败的),所以事务应该多而短小。长事务会锁住
很多资源比较长的时间,因此也比较容易导致其他进程对资源的等待和死锁的机会。
10、评估你开发系统的关键业务,在很多数据库系统对性能的要求是彼此矛盾的,比如OLTP
应用和DSS是不同的。DSS倾向于使用各种索引加快检索速度,而大量的索引对OLTP则是
负担。
11、不要在应用程序中写怪异的SQL 查询,比如 WHERE money!>40000,这样的语句,这种
SQL查询,数据库的SQL优化器是无法进行优化的。
12、定期维护和管理你的数据库系统,压缩掉那些“垃圾”空间,很多数据库系统执行类似
删除,事务等操作的时候,并不回收无用的物理空间。所以,制定一份合理的数据库
维护计划,不要等日志文件或者LOG文件越长越大的时候才去整理数据库。
还有很多很多要注意的东西,。。。。。。

但是一般来说,
对于普通系统,注意应用系统设计,数据库设计的合理性是最最重要的。
很多系统的速度低下都不是数据库本身的问题,按正常设计需求也远达不到需要优化的程度
糟糕的速度多数来自糟糕的应用程序设计和数据库结构设计。
qianxh 2000-08-19
  • 打赏
  • 举报
回复
关键在于善用索引,但索引对效率的影响是两方面的:提高查询速度,降低插入速度;
因此如果是大批量的插入,应先插入完后再按照查询需要建索引;
如果是零星插入大批量查询,则应先建索引;聚簇索引查询最快,但插入最慢,一般不要使用;
索引要按照select语句的where子句和order by子句所用到的字段顺序来建才能尽可能提高查询速度,如以下语句:
select * from Table1 where Field1=@value1 and Field2=@value2 order by Field3,Field4
如果Table1的记录很多,则应建两个索引:
create index Index1 on Table1(Field1,Field2)
create index Index2 on Table1(Field3,Field4)

另:不同意cooler的第2点,原因有二:
1.drop和create语句不能放在Transaction中,处理不安全;
2.drop数据库在多用户环境可能引起其他操作失败。
Wonny 2000-08-18
  • 打赏
  • 举报
回复
COOLER 说的好,我也要照做。
cooler 2000-08-18
  • 打赏
  • 举报
回复
1.好的数据库系统设计是一切效率的更本;刚出道的学生总是喜欢设计第3范式的数据表,实际效率远不如一定冗余的数据表效率高;
2。好的SQL语句:比如delete from table1远不如drop table1;create table table1的
速度高;
3。好的设计思路:可以用SQL语句搞定的就不用程序取回来自己算(比如我就写过一个SQL语句,可以根据人员信息表的身份证号码自动填入出生年月日信息和性别信息,比我原来从数据库取回来用程序自己计算、判断、更新的效率高一百倍;可以不取的字段不要取,select col1,col2
绝对比select *有效率;善用存储过程......
4。索引和锁的影响很重要:你不妨将自己的程序思路整理一下,定出哪些是核心表;然后全盘
查找你对核心表的使用情况,将其条件字段记录下来,然后做有根据的索引优化。
5。系统安装策略:数据库服务器硬盘和系统硬盘分家,数据库服务和系统其他服务分家.......
6。我的发言完了,请大家鼓掌........!@#!@#谁扔的鸡蛋?@#!@#!@
razzor 2000-08-18
  • 打赏
  • 举报
回复
要深入了解一下索引的原理、结构
根据实际情况,选择是否使用索引。用何种类型的索引
了解事务和索引中的锁机制。

bing71 2000-08-18
  • 打赏
  • 举报
回复
改善数据结构。

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧