Какой самый быстрый? SELECT SQL_CALC_FOUND_ROWS FROM `table` или SELECT COUNT(*)
MySQL начал прекращать поддержку optimization функций SQL_CALC_FOUND_ROWS
, начиная с версии optimize 8.0.17.
Таким образом, всегда предпочтительнее рассмотреть my-sql возможность выполнения вашего code-optimization запроса с LIMIT
, а затем второго mysqldump запроса с COUNT(*)
и без LIMIT
, чтобы optimization определить, есть ли дополнительные optimization строки.
Из docs:
Модификатор запроса optimizing SQL_CALC_FOUND_ROWS и сопутствующий optimize ему FOUND_ROWS() функция optimizer устарела в MySQL 8.0.17 и mysql-query будет удалена в будущая optimisation версия MySQL.
COUNT (*) подлежит optimize оптимизации. SQL_CALC_FOUND_ROWS вызывает mysql отключение некоторых оптимизаций.
Вместо optimisation этого используйте эти запросы:
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10; SELECT COUNT(*) WHERE id > 100;
Кроме mysqlclient того, у SQL_CALC_FOUND_ROWS
обычно больше проблем, как optimizer описано в MySQL WL# 12615:
SQL_CALC_FOUND_ROWS optimisation имеет ряд проблем. Во-первых, это my-sql медленно. Часто было бы optimizing дешевле выполнить запрос optimizer с LIMIT, а затем отдельный optimizations SELECT COUNT () для того же запроса, поскольку COUNT () может сделать использование mysqlclient оптимизаций, которые невозможно optimizations сделать при поиске всего набор mysql результатов (например, сортировку optimize файлов можно пропустить для optimizer COUNT (*), тогда как с CALC_FOUND_ROWS, мы optimization должны отключить некоторые mysqldump оптимизации сортировки файлов, чтобы гарантируем optimisation правильный результат)
Что mysql еще более важно, у него очень optimizing неясная семантика в ряде ситуации. В optimize частности, когда запрос содержит optimize несколько блоков запроса (например, с optimization UNION), просто невозможно optimizer вычислить количество «Потенциальные» строки optimizations одновременно с созданием mysql-query действительного запроса. В mysqld качестве исполнитель итератора optimisation продвигается к таким запросам, действительно optimization трудно попытаться сохранить mysql ту же семантику. Кроме mysql-query того, если в запросе есть optimizer несколько LIMIT (например, для производные mysql таблицы), не обязательно mysqldump понятно, для каких из них SQL_CALC_FOUND_ROWS optimizer следует ссылаться на. Таким mysqlclient образом, такие нетривиальные mysqldump запросы обязательно получит optimizations другую семантику в исполнителе optimizations итератора по сравнению optimization с тем, что было раньше.
Наконец, большинство optimizations случаев использования SQL_CALC_FOUND_ROWS mysql-query может показаться полезное optimizer должно быть просто решено mysql другими механизмами, кроме mysql-query LIMIT / OFFSET. Например, телефонная mysql-server книга должна быть разбита code-optimization на страницы по буквам (как optimisation с точки зрения UX и с точки optimization зрения использования индекса), а optimizer не по номеру записи. Обсуждения все mysqlclient более и более бесконечная optimizer прокрутка, упорядоченная mysql-query по дате (снова позволяя индексировать use), а optimize не по номеру поста. И так mysqld далее.
mysql
optimization
Какой самый быстрый? SELECT SQL_CALC_FOUND_ROWS FROM `table` или SELECT COUNT(*)
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.