table_a表是百万级别的表,客户界面上有多种条件去刷数据,比较慢,在pl/sql developer里的explan看cost已经是只有几百,每条语句都走索引了。但是经常还是比较慢,还超时。
详细语句我就不写了,很长很繁琐。大概就是下面这种情况吧,是四个select 联合在一起的。
我想问把下面语句的union后面的全部删掉是否会快一些?因为union后的也刷不出数据了。SELECT * FROM table_a a
WHERE 0=0 AND  a.xx >= x_value
UNION
SELECT * FROM table_a a
WHERE 0=1 AND  a.kk <= k_value我在生产环境试了一下,似乎有那么一点点的提高,但是好像不明显。

解决方案 »

  1.   

    airson79 :
    让索引失效?如何做?是在语句里指定不走索引?这个我倒是没搞过。
    而且可能也会有问题,我如何知道用户查的数据超过表数据量的5%?
      

  2.   

    通常是加一个hint 
    SELECT /*+ full(a)*/* FROM table_a a 
    WHERE 0=0 AND  a.xx >= x_value
    or
    SELECT /*+ no_index(a)*/* FROM table_a a 
    WHERE 0=0 AND  a.xx >= x_value
    如何知道用户查询或者修改的数据量是否超过5%就靠你收集用户的sql语句来做统计了
    如果你收集到了50条sql语句其中45条访问的数据量都超过5%那你就可以认为用户的sql访问数据量都大于5%,至于一条sql访问的
    数据量占全表的多少这个应该可以算的出来吧