数据库性能优化

时间:2021-10-31 06:00:29
我们项目现有个性能瓶颈,用存储过程操作4个数据库表,其中三个都是几千条记录,还有一个是70w条的,结果run一下存储过程需要2个小时,其中和那个最大表有关的就占去了1.5小时,怎么优化才能提高性能呢
PS,所有的表都已经根据查询语句设置了索引,这个办法就不要想,还有什么别的办法

12 个解决方案

#1


你可以把数据量大的表分区,之后建分区索引,调节你的服务器的sga的值!分区是你不错的选择!

#2


提高显著吗,昨天我们优化一下业务流程,才提高了15分钟的效率,oracle不会这么差吧

#3


你描述的太简略了,也没有办法给你准确的提意见,但是,建议优化一下语句吧。
    用sql_trace跟踪过吗?我想应该跟踪一下,搞清楚耗时到底在哪个具体步骤上,看执行计划有没有问题,特别大的那个表是否能避免全表扫描。

#4


索引能提高查询速度,但索引太多了会大大降低数据修改(insert update delete)速度
索引在检索的行数少于总行数的7%(已排序表)40%(未排序表)才提高速度
索引技术常见的有三种:B树索引、位图索引、索引组织表
70w的表根本不算大。sqlserver7都能管理900w记录在几毫秒内查出数据
我们的分区表单个分区都超过千万记录了。

#5


要建立索引的,我们现在的项目中,几百万条数据,建了索引查询数度不到0.1S

#6


索引要设置对,你主要还是优化一下查询语句吧,在查询语句的条件中,能够筛选掉大部分数据的条件写在最后面,如果你先把70W条记录的表用一个条件大大变小范围以后,再和其它两张表关联,速度能快很多,另外加大ORACLE的高速缓冲区也有一定帮助,ORACLE有一个分析查询语句的工具,具体记不清了,你可以上网找一下,用来分析一下你的查询语句。

#7


这么点记录算不上大表. 把你的存储过程中SQL拿出来看一下执行计划, 看是否使用了该使用的索引,   表是否经过了分析等. 

用好索引可以解决大部分的性能问题.

#8


索引经过trace肯定被使用了,最大的那个表之执行查询操作,所以加的索引应该不会造成性能下降,只会多占用磁盘空间,我们小组已经研究oracle优化两次了,几乎in全部换成了exist,也很少有null的条件可是好像还是很慢呀

#9


对了,那个70w记录的表确实是使用了全表扫描,可是怎么才能避免呢

#10


主要矛盾在于两个要进行两重循环的匹配,时间复杂度是m*n,而且在最大的表中会经常出现查找不到的情况(这是正常业务情况),有什么办法吗?

#11


你的sql有问题~ 
在改动数据结构来优化之前, 应该好好检查sql是不是最好的

#12


可以试试临时表和数组

#1


你可以把数据量大的表分区,之后建分区索引,调节你的服务器的sga的值!分区是你不错的选择!

#2


提高显著吗,昨天我们优化一下业务流程,才提高了15分钟的效率,oracle不会这么差吧

#3


你描述的太简略了,也没有办法给你准确的提意见,但是,建议优化一下语句吧。
    用sql_trace跟踪过吗?我想应该跟踪一下,搞清楚耗时到底在哪个具体步骤上,看执行计划有没有问题,特别大的那个表是否能避免全表扫描。

#4


索引能提高查询速度,但索引太多了会大大降低数据修改(insert update delete)速度
索引在检索的行数少于总行数的7%(已排序表)40%(未排序表)才提高速度
索引技术常见的有三种:B树索引、位图索引、索引组织表
70w的表根本不算大。sqlserver7都能管理900w记录在几毫秒内查出数据
我们的分区表单个分区都超过千万记录了。

#5


要建立索引的,我们现在的项目中,几百万条数据,建了索引查询数度不到0.1S

#6


索引要设置对,你主要还是优化一下查询语句吧,在查询语句的条件中,能够筛选掉大部分数据的条件写在最后面,如果你先把70W条记录的表用一个条件大大变小范围以后,再和其它两张表关联,速度能快很多,另外加大ORACLE的高速缓冲区也有一定帮助,ORACLE有一个分析查询语句的工具,具体记不清了,你可以上网找一下,用来分析一下你的查询语句。

#7


这么点记录算不上大表. 把你的存储过程中SQL拿出来看一下执行计划, 看是否使用了该使用的索引,   表是否经过了分析等. 

用好索引可以解决大部分的性能问题.

#8


索引经过trace肯定被使用了,最大的那个表之执行查询操作,所以加的索引应该不会造成性能下降,只会多占用磁盘空间,我们小组已经研究oracle优化两次了,几乎in全部换成了exist,也很少有null的条件可是好像还是很慢呀

#9


对了,那个70w记录的表确实是使用了全表扫描,可是怎么才能避免呢

#10


主要矛盾在于两个要进行两重循环的匹配,时间复杂度是m*n,而且在最大的表中会经常出现查找不到的情况(这是正常业务情况),有什么办法吗?

#11


你的sql有问题~ 
在改动数据结构来优化之前, 应该好好检查sql是不是最好的

#12


可以试试临时表和数组