2010-03-23 2 views
0

У меня есть простая таблица, где мне нужно извлечь некоторые записи. Проблема заключается в том, что функция оценки является очень хранимая процедура отнимает много времени, так что я не должен называть его дважды, как в этом предложении:MySQL оптимизировать предложение

SELECT *, slow_sp(row) FROM table WHERE slow_sp(row)>0 ORDER BY dist DESC LIMIT 10 

Сначала я думал, что в оптимизируют, как это:

SELECT *, slow_sp(row) AS value FROM table WHERE value>0 ORDER BY dist DESC LIMIT 10 

Но это не работает, потому что «значение» не обрабатывается, когда вычисляется предложение WHERE.

Какую идею оптимизировать? Благодарю.

ответ

2

Что делает slow_sp? Чтобы начать оптимизацию запроса, вы должны добавить индекс на dist.

Чтобы сделать ваш второй запрос работы, используйте HAVING вместо WHERE.

+0

slow_sp возвращает значение от 0 до 100 в соответствии с «значением» слова в текстовом корпусе. В основном доступ к массиву предварительно просчитанных значений для определения значения int. Я попробую значение HAVING. Благодарю. – Ivan

+0

Это функция MySQL, правильно? В основном добавьте индексы для каждого столбца, в который вы включаете в себя инструкции. Я не могу больше помочь, не видя запроса в рассматриваемой функции. – raveren

+0

Это нормально, как раритет. Я забыл, что предложение может помочь. Теперь он работает. Благодаря! – Ivan

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