2012-03-15 3 views
1

В настоящее время я сталкиваюсь с проблемой, когда, когда я использую «LIKE» в моем запросе, я получаю результат за 2 секунды. Но когда я использую вместо этого '=', для получения результата требуется около 1 минуты. Ниже мой запрос:Запрос Mysql с '=' намного медленнее, чем «LIKE»

  • QUERY1

Следующий запрос занимает 2 секунды:

`select distinct p.Name from Timeset s 
join table1 f on (f.id = s.id) 
join table2 p on (p.source=f.table_name) 
join table3 d on (d.Name = p.Name) WHERE 
s.Active = 'Y' AND **p.sourcefrom like '%sometable%'` 
  • QUERY2

Тот же самый запрос замены «, как 'by' = 'занимает 1 минуту:

select distinct p.Name from Timeset s 
join table1 f on (f.id = s.id) 
join table2 p on (p.source=f.table_name) 
join table3 d on (d.Name = p.Name) WHERE 
s.Active = 'Y' AND **p.sourcefrom = 'sometable' 

Я очень озадачен, потому что я знаю, что «LIKE», как правило, медленнее (чем «=»), так как MySQL нужно искать другие возможности. Но я уверен, почему в моем случае «=» медленнее с такой существенной разницей.

спасибо любезно за помощь заранее,

С уважением,

+3

Оба вопроса идентичны. Пожалуйста, отредактируйте свой вопрос. – iblue

+0

возможно из-за плана запроса ... есть ли эквивалент mysql для обновления статистики? –

+0

Индекс на 'table2.sourcefrom'? – cHao

ответ

1

При использовании = MySQL, вероятно, использует другой индекс по сравнению с тем, когда вы используете LIKE. Проверьте выходные данные из двух планов выполнения и посмотрите, что такое differnce. Затем вы можете использовать более эффективный индекс. Возможно, стоит потратить ANALYZE TABLE для каждой из задействованных таблиц.

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