一项目遇到需要考虑数据库性能方面的问题,
有600个以上客户端,数据库中有三张表,每张表至少存在2百万条记录,并且最坏情况下数据量是以每天万条记录的数量级稳步增长,系统使用过程中需要对这三张表进行关联查询,请问,建立了相关索引后,最恶劣的情况下数据库响应会是一个什么程度(包括响应时间),性能会有多大影响。
谢谢!

解决方案 »

  1.   

    to liuyi8903(甜脆夹心) :
    服务器配置问题不是很大,系统采用BS结构,绝大多数客户端采用互联网连接,性能和可靠性比不上局域网。
      

  2.   

    to yxsalj(想和你去吹风):我原意是在写SQL的时候对语句进行优化,但对这样处理的效果到底有多大心里没底,所以下午我已将相关业务逻辑拆分,这样三张关联表变成了三张独立表,由原来的一次访问三张关联表改成分三次访问独立表。数据库连接采用连接池获取,减少创建和释放连接对象所耗用的时间。数据集在需要的时候创建,这样处理不知道响应延迟是否较好。
    另外您提到的驱动表和查询执行计划这个办法具体还请指教,谢谢!
      

  3.   

    所谓驱动表出现在多表连接中,数据有几种连接方式:嵌套循环,归并排序,哈希连接,索引连接比较常见.当你的表有好的索引时,优化器会选择嵌套循环,能很快的响应,不需要一次把全部的数据查出.如果没有索引,或索引缺乏选择性时,优化器会选择其他方式.在多表连接中,驱动表就是首先执行的表,当多表都已经分析,而且有索引(即数据分布均匀),一般情况下,优化器会选择第一张表做驱动表.选择驱动表的原则是该表返回的数据记录比较少,和其他的表连接时会有比较好的性能.可以使用提示强制指定from后的第一张表为驱动表,格式:select /*+ordered*/...
    调整的原则是时时查看执行计划.执行HOME/RDBMS/ADMIN下的utlxplan.sql脚本创建表plan_table.生成SQL的执行计划.explain plan set statement_id='任意值' for YOUR SQL,然后查看plan_table的内容.如果有第三方工具,如pl/sql developer,直接F5就可以看到执行计划.
    索引的建立要慎重,并不是越多越好,也不是什么样的列都可以.当一个表上有多个索引,而某个索引不具备好的选择性时,优化器不能做正确的判断,所以执行计划是如此的重要!
    ps:你可以看看性能调整方面的书籍或ORACLE的文档.调整是个很大而且很有挑战的主题,不可能一下就能说清楚.
    GOOD LUCKY WITH U!