производительность sql против производительности php для поиска строк - PullRequest
1 голос
/ 14 марта 2012

Мне дали тест на новую работу, и я не могу решить, по какому пути идти, вопрос в следующем:

для данной таблицы базы данных (которую я разработал для другого вопроса):

message_id | INT PRIMARY AUTO_INCREMENT
user_id    | INT FOREIGN_KEY
from_id    | INT FOREIGN_KEY
message    | TEXT

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

$query = "SELECT * FROM messages m WHERE user_id='$id' AND message LIKE '%$string%';

или будет быстреесделайте:

$query = "SELECT * FROM messages m WHERE user_id='$id';

и запустите получаемый набор результатов: substr_count()?

Или есть более быстрый и эффективный способ сделать это?

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

Вы всегда должны искать на стороне базы данных. Хотя LIKE '%word%' всегда вызывает полное сканирование таблицы, не каждая строка должна быть сериализована, передана клиенту и снова десериализована.

Кроме того, если вы можете оптимизировать запрос для использования полнотекстового индекса или для сопоставления только с последней частью слова (например, LIKE 'word%'), полное сканирование таблицы не потребуется, поскольку его можно оценивать по индексу ( если он существует).

0 голосов
/ 14 марта 2012

Первый подход должен быть быстрее. Если ваша цель - просто найти количество подходящих сообщений, это должно быть еще быстрее:

SELECT count(*) FROM messages m WHERE user_id='$id' AND message LIKE '%$string%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...