Ищет ли массив PHP быстрее, чем поиск / извлечение из MySQL - PullRequest
6 голосов
/ 10 ноября 2009

Было бы любопытно узнать, что быстрее - если у меня есть массив из 25000 пар ключ-значение и база данных MySQL с идентичной информацией, который будет быстрее искать?

Большое спасибо всем!

Ответы [ 7 ]

5 голосов
/ 10 ноября 2009

Лучший способ ответить на этот вопрос - выполнить тест.

1 голос
/ 10 ноября 2009

Следует помнить одну вещь: если ваш поиск требует большой загрузки ЦП в базе данных, возможно, стоит сделать это на PHP, даже если он не такой быстрый. При масштабировании обычно проще добавлять веб-серверы, чем серверы баз данных.

1 голос
/ 10 ноября 2009

Хотя вы должны просто попробовать это сами, я собираюсь предположить, что есть надлежащий индекс, и заключить, что БД может делать это быстрее, чем PHP, благодаря тому, что создана для этого.

Однако это может быть связано с задержками в сети, скоростью синтаксического анализа SQL против PHP или загрузкой БД и процентом использования памяти.

0 голосов
/ 10 ноября 2009

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

0 голосов
/ 10 ноября 2009

Моей первой мыслью будет более быстрый поиск по массивам. Но, с другой стороны, это действительно зависит от нескольких факторов:

  1. Как устроена ваша таблица базы данных (правильно ли она использует индексы и т. Д.)
  2. Как построен ваш запрос
  3. Базы данных обычно оптимизированы для таких поисков.
  4. Какой тип поиска вы выполняете в массиве? Есть несколько типов поиска, которые вы можете сделать. Самый медленный - это прямой поиск, при котором в каждой строке выполняется проверка значения, а более быстрый - бинарный поиск.

Я предположил, что вы сравниваете оператор select, выполненный непосредственно в базе данных, и выполняете поиск по массиву в php. Не

0 голосов
/ 10 ноября 2009

Это зависит. В mysql вы можете использовать индексирование, что увеличит скорость, но с php вам не нужно отправлять информацию через net (если база данных mysql на другом сервере).

0 голосов
/ 10 ноября 2009

Проверьте это - профилирование чего-то настолько простого, насколько это должно быть тривиально.

Кроме того, помните, что базы данных предназначены для выполнения именно такого рода задач, поэтому они, естественно, преуспеют в этом. Даже наивный бинарный поиск будет иметь только 17 сравнений для этого, поэтому 25 тыс. Элементов это не много. Настоящая проблема - сортировка, но она была побеждена до смерти за последние 60 с лишним лет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...