Как оптимально узнать больше ли 1000 строк было добавлено в mysql таблицу?
Задача: узнать больше ли 1000 строк было добавлено в mysql таблицу table1 за прошедший 1 час. Как оптимально это выполнить? COUNT(*)? SQL_CALC_FOUND_ROWS? Возможно выборка строк с лимитом 1000 и последующий подсчет на на php count()?
SELECT * FROM table1 WHERE table1.DATETIME >= '2021-02-20 16:14:35';
Спасибо, но оптимален ли будет COUNT(*)? Ведь так будут пересчитаны все строки, а нужно считать только >= 1000. Есть ли решение? Лимит и подсчет на php count() будет эффективнее?
ragnar_ok, если поле в индексе, count будет выполняться адекватное время
если запросов на count будет значительно больше запросов на добавление/изменение (сильно значительно) то возможно эффективнее вместо постоянных подсчетов count делать это тригером на изменения в специальную таблицу/поле, тогда достаточно будет это поле читать
Rsa97, получаю ошибку: Error Code: 1170. BLOB/TEXT column 'IP' used in key specification without a key length. Насколько я понимаю, то нужно ограничить индекс по длине. Какую длину выбрать для IP? 15? Корректно ли выбирать такой длинный текстовый индекс?
CREATE INDEX `idx_table_DATETIME_IP` ON `table` (`DATETIME`, IP(15))
ragnar_ok, Индекс должен быть составлен в обратном порядке, (IP, DATETIME).
Для хранения IPv4 лучше использовать поле типа UNSIGNED INT и функции преобразования INET_ATON() и INET_NTOA(). Для IPv6 тип VARCHAR(32) и функции INET6_ATON() и INET6_NTOA().
Rsa97, спасибо! Изучил информацию по этому поводу. Однако в моем случае поле IP управляется CMS и оно может быть только с типом TEXT. Правильно ли я понимаю, что в этом случае для IPv4 нужно установить длину ключа равную 15?