SELECT 
  (SELECT  UDA_VALUES.UDA_VALUE_DESC 
FROM  UDA_ITEM_LOV,
UDA_VALUES 
WHERE  UDA_ITEM_LOV.UDA_ID = 3 
AND  UDA_ITEM_LOV.UDA_VALUE = UDA_VALUES.UDA_VALUE 
AND  UDA_ITEM_LOV.UDA_ID = UDA_VALUES.UDA_ID 
AND  UDA_ITEM_LOV.ITEM = ITEM_MASTER_NEW.ITEM) AS BRAND
FROM
   ITEM_MASTER_NEWUDA_ITEM_LOV表中数据量有2千万条,索引和主键是ITEM+UDA_ID+UDA_VALUE
ITEM_MASTER_NEW表中数据量有70万条,索引和主键是ITEM
现在这条查询要花费11秒钟,想改善觉得无从下手。请教各位高手指点,谢谢

解决方案 »

  1.   

    查询出来的结果有多少,UDA_ITEM_LOV中UDA_ID = 3的记录有多少,UDA_VALUES有多少记录
      

  2.   

    查询出来的结果大致有4500条左右,UDA_VALUES中4000条
      

  3.   

    SELECT  UDA_VALUES.UDA_VALUE_DESC 
    FROM  UDA_ITEM_LOV,
    UDA_VALUES 
    WHERE  UDA_ITEM_LOV.UDA_ID = 3 
    AND  UDA_ITEM_LOV.UDA_VALUE = UDA_VALUES.UDA_VALUE 
    AND  UDA_ITEM_LOV.UDA_ID = UDA_VALUES.UDA_ID 
    有多少条?
      

  4.   

    UDA_ITEM_LOV中UDA_ID = 3的记录有多少。那个SQL的执行计划是什么。执行下面的SQL要多长时间,有多少记录
    SELECT UDA_ITEM_LOV.UDA_VALUE, UDA_VALUES.UDA_ID
    FROM  UDA_ITEM_LOV,
    ITEM_MASTER_NEW 
    WHERE  UDA_ITEM_LOV.UDA_ID = 3 
    AND  UDA_ITEM_LOV.ITEM = ITEM_MASTER_NEW.ITEM
      

  5.   

    SELECT  UDA_VALUES.UDA_VALUE_DESC 
    FROM  UDA_ITEM_LOV,
    UDA_VALUES 
    WHERE  UDA_ITEM_LOV.UDA_ID = 3 
    AND  UDA_ITEM_LOV.UDA_VALUE = UDA_VALUES.UDA_VALUE 
    AND  UDA_ITEM_LOV.UDA_ID = UDA_VALUES.UDA_ID 
    AND  UDA_ITEM_LOV.ITEM = ITEM_MASTER_NEW.ITEMUDA_ITEM_LOV表中数据量有2千万条,索引和主键是ITEM+UDA_ID+UDA_VALUE
    ITEM_MASTER_NEW表中数据量有70万条,索引和主键是ITEM------------------------------1.
    并非所有情况下index都比full table scan要快,但是大多数情况下是,从你反映出的情况看,要select出来的行数比source要小得多,所以尝试建立索引2.
    UDA_ITEM_LOV单独对UDA_ID字段加index
    ITEM_MASTER_NEW对连接条件字段ITEM+UDA_ID+UDA_VALUE加index3.
    一般加non-unique index,如果逻辑上index字段是唯一的话,加unique index
    在sql里加hint让sql语句走index
      

  6.   

    建议楼主改一下sql的样式,否则可读性比较差:
    SELECT t1.UDA_VALUE_DESC as BRAND
      FROM UDA_VALUES t1,
           (SELECT from UDA_ITEM_LOV where UDA_ID = 3) t2,
           ITEM_MASTER_NEW t3
     WHERE t1.UDA_VALUE = t2.UDA_VALUE
       AND t1.UDA_ID = t2.UDA_ID
       AND t2.ITEM = t3.ITEM