2014-12-23 2 views
1

Мой запрос выглядит следующим образом. Если я просто запускаю запрос без отдельного, он занимает всего 11 секунд. Хотя требуется 46 секунд для работы с четкими. Какие-либо рекомендации по оптимизации этого?Оптимизация запроса выбора с DISTINCT

SELECT * FROM ( 
SELECT DISTINCT ELIGIBLE_TO_SIGN_DT 
, LAST_NAME 
, FIRST_NAME 
, EXTENDED_LAST_NAME 
, DT_OF_BIRTH 
, BIRTH_COUNTRY_ID 
, REG_BY 
, LAST_UPDATED_BY 
, REVIEW_STATUS_1 
, REVIEW_STATUS_2 
, REVIEW_STATUS_3 
, MLSB_MATCH_FILTER 
, REG_STATUS_ID 
, REG_STATUS 
, HAS_TRAVELED 
, PLAYER_ID_SHOW 
, MLSB_MATCH 
, TRAINER_AGENT_NAME 
, NATIONAL_ID 
, RES_FOLLOW_UP 
, ATTACHMENT 
, COMMENTS 
, PLAYER_ID 
, CHECKBOX 
, INTL_AMA_ENTRY_ID 
, ALSO_REG_BY 
, MIDDLE_NAME 
, BIRTH_COUNTRY_NAME 
    FROM AS_INTL_ADMIN_REG_VIEW 
    where VARCHAR_FORMAT(ELIGIBLE_TO_SIGN_DT, 'YYYY-MM-DD') >= date('07/02/2015') AND VARCHAR_FORMAT(ELIGIBLE_TO_SIGN_DT, 'YYYY-MM-DD') <= date('08/31/2015') 
) order by case when UPPER(LAST_NAME) is null or trim(UPPER(LAST_NAME)) = '' then 'ZZZZZZ' else UPPER(LAST_NAME) end ASC, case when FIRST_NAME is null or trim(FIRST_NAME) = '' then 'ZZZZZZ' else FIRST_NAME end ASC 
limit 200 offset 0  
+1

проверка план выполнения запроса, чтобы увидеть стоимость различны. –

+0

В моем плане исполнения не было различий. Более того, я вижу ту же стоимость, есть ли различное ключевое слово или нет. – suresh

+0

опубликуйте план выполнения также вместе с этим –

ответ

3

Если приведенный в качестве примера пример является вашим фактическим кодом, то разница учитывается значением LIMIT, которое у вас есть на запросе. Когда вы запускаете его без DISTINCT, механизм запроса может просто взять первые 200 строк. Но с DISTINCT, он сначала должен работать на всю таблицу, чтобы найти определенные строки, а затем выберите первый 200.

1

DISTINCT является дорогостоящим, ORDER BY ... UPPER() ... может быть дорогостоящим

В приведенном запросе мне кажется, что DISTINCT используется без необходимости или для исправления дубликатов, которых не должно быть. Если данные плохие, подумайте об их исправлении, а не об этом.

Убедитесь, что вы едите нечувствительные индексный встроенный создать индекс myindex на туЬаОм ВЕРХНЕМ (LAST_NAME)

Смежные вопросы