2015-09-15 4 views
0

Мне нужно улучшить ниже SQL-скрипт, чтобы иметь лучшую производительность. Есть ли предложение?повысить производительность скрипта sql

Цель: Отфильтровать таблицу Table_1, содержащую ключевые слова в таблице_2.

Пример:

Table_1 have data: "xxxyyyzzz" and "aaabbbccc" 
Table_2 have data: "%xxyy%" 
Result: "xxxyyyzzz" will be filter out and "aaabbbccc" will be return in query. 

Статистика:

Table_1 with 1,000,000 record 
Table_2 with 2,250 record 

Текущий результат: Возврат 100 записи в 800 сек

Script, как показано ниже:

select * from table_1 
minus 
select * from table_1 a 
where exists 
(select 1 from table_2 b 
where a.field_1 like b.field_1); 
+0

ли данные в table_2, используемой в качестве шаблона в LIKE предиката, как показано, или те поля точные совпадения (НЕТ НЕСКОЛЬКО)? –

ответ

0

Два вещи, чтобы рекомендовать здесь:

  • Индексы
  • Денормализация

Одна вещь, которую люди склонны делать, когда базы данных получить массивное это вызвать Денормализация. Это когда вы храните данные из нескольких таблиц в одной таблице, чтобы избежать необходимости делать join. Это полезно, если ваше приложение использует определенные чтения для его питания. Это широко используемая тактика при масштабировании.

Если Denormalization это может быть и речи, другой, более простой способ оптимизировать этот запрос будет убедиться, что у вас есть индексы на колоннах вы работаете в join и like против. Индексирование столбцов для like окажет огромное влияние, вы сразу заметите увеличение производительности. Кроме того, использование SELECT * - это действительно плохая практика и создает хит производительности, измените его, указав, какие столбцы вы хотите вернуть!

Любые другие оптимизации Мне нужна дополнительная информация о данных, надеюсь, что это поможет!

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