Контекст: это база данных MySQL для проекта B2C.
Я использую предложение SELECT COUNT (), чтобы заранее знать количество строк, которые вернет обычный SELECT. Это только для расчета нумерации страниц в графическом интерфейсе. Проблема, с которой я сталкиваюсь, заключается в том, что просто в локальной настройке моего ноутбука длительность запроса SELECT COUNT () находится в опасном порядке от 1 с до запроса SELECT, который составляет порядка 1 мс. Примерно в 1000 раз медленнее !!
Я выделил проблему и создал отдельный проект для простого тестового стенда. Таблица document была создана следующим образом:
drop table document;
create table document (
id int primary key auto_increment,
brand varchar(128) not null,
ref varchar(32) not null,
title varchar(128) not null,
brief varchar(256) not null,
content mediumtext not null,
fulltext key (brand, ref, title, brief, content)
);
Чтобы создать модель реальной проблемы, я заполнил таблицу 2000 случайными текстовыми строками, имеющими brand и ref 1 слово, title 6 слов, краткое 12 слов и содержание около 50 Кбайт в словах.
Типичный запрос пользователя выглядит примерно так:
select id, brand, ref, title, brief, content from document
where match (brand, ref, title, brief, content) against ('espadas' in boolean mode)
limit 24
поэтому запрос COUNT () должен быть:
select count(id)
from document
where match (brand, ref, title, brief, content) against ('espadas' in boolean mode)
Используя локальную настройку в моем ноутбуке, эмпирическая продолжительность обычных запросов составляет 1-3 мс, что достаточно для меня. Я был готов к еще более длительным срокам, имея в виду значение поиска FULLTEXT / MATCH для пользователя. Количество запросов () увеличивается до 1 с, что приводит к более высокому риску даже при низком параллелизме.
Есть идеи, как уменьшить длительность SELECT COUNT ()?
Версия MySQL: 10.1.10-MariaDB, а таблица документов - InnoDB.