2011-01-18 8 views
0

Мы используем базу данных mysql с примерно 150 000 записей (имен). Наши поиски в поле «имена» выполняются с помощью функции автозаполнения в php. У нас есть таблица, индексированная, но все еще чувствую, что поиск немного вялый (несколько полных секунд против чего-то вроде Google Finance с почти мгновенным ответом). Мы пришли к ж/2 возможности, но хотели бы получить более глубокое представление:mysql хранит рутину против mysql-альтернативы?

  1. Может ли мы создать кучу (много тысяч или больше) хранимые процедуры для ускорения поиска, или создавать что многие хранимых процедур bog- вниз по дБ?

  2. Есть ли более быстрая альтернатива mysql для операторов «select» (скорость при вставке & обновления строк не слишком важна, поэтому мы можем принести в жертву, если это необходимо). Я смутно слышал о BigTable & других, которые не поддерживают инструкции JOIN .... нам нужны операторы JOIN для некоторых наших других запросов, которые мы делаем.

ТНХ

+0

Остановить. Вы пробовали http://dev.mysql.com/doc/refman/5.1/en/optimization.html? Обычно производит фантастические результаты, особенно при первом использовании. – Osw

+0

Я буду читать по кешированию. Есть ли там хороший документ (или видео), в котором сравниваются сильные/слабые стороны каждой из основных баз данных (т.е. mysql vs. oracle vs. cassandra и т. Д.)? Прежде чем я углубится в mysql, я хочу убедиться, что у меня есть правильный d-base –

+1

Wait, 'select name from names где name, как 'foo%' limit 10' занимает секунды ?! Это не должно. Это простая операция индекса. Вы уверены, что у вас есть индексы? Пожалуйста, дайте примерный запрос вместе с выводом 'explain'. – derobert

ответ

1
  1. Забудьте о хранимых процедурах. Они не помогут вам.
  2. Mysql - хороший выбор, его часто считают самой быстрой СУБД. И нет необходимости искать «более быструю альтернативу выборке».

Неопределенное время выполнения запроса, о котором вы упомянули, является результатом неправильной конфигурации сервера или неправильной схемы базы данных или обоих. Пожалуйста, прочитайте this response on serverfault или обновите свой вопрос здесь: укажите конфигурацию сервера, часть схемы базы данных и запрос проблемы, а также explain select ...

0

Вам необходимо кэшировать информацию в памяти, чтобы избежать принятия повторных вызовов в базе данных.

+0

будет иметь тысячи и тысячи операторов select в кэше, чтобы замедлить нас, хотя? Пример закрытий, который у меня есть, - функция автопоиска Google Finance .... будет хранить все вызовы для тикеров (и частичных тикеров) в кеше, или они, вероятно, делают что-то еще? –

+0

также, что происходит, когда базовые данные изменяются в таблице ... продолжает ли кеш возвращать старые данные? –

+0

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

0

Да, вы должны истечь кеш, если вы меняете данные, но, как вы сказали, это не является обычным явлением, поэтому вы можете даже сделать это на полуавтоматической основе и не беспокоиться об этом, если это необходимо. Вы должны проверить this MySQL.com article, а также, возможно, изучить механизм хранения MEMORY (извините, новый и не может размещать более одной гиперссылки на сообщение ?!), который требует немного кодирования для использования, но может быть чрезвычайно эффективным.

Каково фактическое время запроса (против времени страницы)? На достаточно современном сервере, который не загружен в ад, MySQL должен иметь возможность делать запрос автозаполнения на 150 тыс. Строк намного, гораздо быстрее, чем на две секунды. Отсутствуют некоторые индексы?

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

  • Нет связанных вопросов^_^