MySQL Query через 40000 строк v / s однократной загрузки и для цикла - PullRequest
0 голосов
/ 25 марта 2019

У меня есть таблица, которая имеет 40000 строк.Со стороны кода примерно в ту же секунду около 20 000 пользователей должны будут выполнить запрос, чтобы найти связанную строку.Какой подход лучше?

Загрузка всех 40000 строк в кэш и запуск цикла for для поиска записи?Просто запросите базу данных.

Вот как будет выглядеть запрос.Где параметр будет IP пользователей.

SELECT * FROM iplist where ipfrom <= INET_ATON('xxx.xxx.xx.xx') limit 1;

1 Ответ

1 голос
/ 25 марта 2019

MySQL уже кэширует данные в виде InnoDB Buffer Pool .Когда запрашиваются страницы данных и индексов, они копируются в ОЗУ и используются для любых последующих запросов.

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

ALTER TABLE iplist ADD INDEX (ipfrom);

Тогда для поиска определенного значения в этом столбце не потребуется сканирование таблицы, это сузит поиск эффективно.

Примечаниекогда вы используете LIMIT, вы должны также использовать ORDER BY, иначе полученная строка будет первой прочитанной в порядке индекса, что может не всегда соответствовать желаемому.Если вы используете ORDER BY с избыточностью (то есть в том же порядке, в котором он читает индекс), он будет оптимизирован.

SELECT * FROM iplist where ipfrom <= INET_ATON(?) ORDER BY ipfrom LIMIT 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...