oracle走索引查询变慢
1个回答
展开全部
在做交易系统时,遇到一个场景,需要查询交易表的某个时段的交易,但是时段间交易数据过大,导致查询时间太长,达到25小时还在进行,最后只能kill。
sql:
t_txn为交易表,merchant_id表示商户号,terminal_id表示终端号,txn_time表示交易时间,同时txn_time有索引。
研究分析,问题就出在txn_time上,如果走索引会非常慢,反而不走索引(/ +no_index(t) /)速度反而很快。
原理分析:
使用索引查一条数据,需要先访问索引的数据,然后再访问表的数据,两次读操作
如果全表扫描,只访问表的数据,一次读操作
所以,如果查询结果占到表数据的50%以上,使用索引必然慢
再考虑到一次读操作可以读多条数据,索引的结构又比表复杂
可能查询结果占到表数据的一定比例以上,使用索引就不如全表扫描了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询