Как я могу быстрее подсчитывать записи в базе данных mySQL?

Я считаю записи в своей базе данных SQL:

$sql = "SELECT * FROM files WHERE id = ?";
$q = $pdo->prepare($sql);
$q->execute([$id]);
$rowCount =$q->rowCount();

Результат $rowCount - 500000. Но для вывода этого единственного числа требуется 5 секунд! Можно ли получить такой результат быстрее?

@PraveenKumar Спасибо. Что означает «индексация»?

peace_love 14.05.2018 12:32

Я не смогу ответить на него эффективно. Взгляните на случайные вещи: stackoverflow.com/q/13051246

Praveen Kumar Purushothaman 14.05.2018 12:33

@PraveenKumar Разве SELECT COUNT(id) FROM.... не будет быстрее

RiggsFolly 14.05.2018 12:34

@RiggsFolly *facepalm* Верно.

Praveen Kumar Purushothaman 14.05.2018 12:35

@PraveenKumar :) :) :) :)

RiggsFolly 14.05.2018 12:35

@BinarWeb Вы про индексацию?

Praveen Kumar Purushothaman 14.05.2018 12:35

Хотя полмиллиона строк с таким же значением id наводят на мысль, что у id должно быть более информативное имя получше :)

RiggsFolly 14.05.2018 12:37

@ThomasG О, теперь я понимаю.

Praveen Kumar Purushothaman 14.05.2018 12:45

Извините @BinarWeb, теперь я понял.

Praveen Kumar Purushothaman 14.05.2018 12:45

Это правда, что COUNT(*) действительно быстр!

peace_love 14.05.2018 12:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
10
97
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

  1. Замените * полем (используйте автоинкремент id) - это немного сократит время.
  2. Индексируйте это поле. - Если вы используете индексированное поле, производительность запроса увеличится.
Ответ принят как подходящий

Используйте функцию COUNT () https://dev.mysql.com/doc/refman/8.0/en/counting-rows.html:

$sql = "SELECT COUNT(*) FROM files WHERE id = ?";

Также убедитесь, что id является индексированным столбцом: https://dev.mysql.com/doc/refman/8.0/en/mysql-indexes.html

SELECT * ..., затем подсчет в PHP, требует перелопатить все столбцы всех строк обратно в PHP. Это большие усилия при очень небольшом выигрыше.

SELECT COUNT(col) ... выполняет подсчет MySQL, но он должен проверить, является ли colNULL. И ему нужно получить значение col для каждой строки.

SELECT COUNT(*) ... считает строки наиболее эффективным способом. Это включает поиск «наименьшего» индекса (или всей таблицы, если нет вторичных индексов) и подсчет по нему.

Вы должен узнаете о INDEXes, чтобы добраться куда угодно в базах данных! Это только одно использование незначительный для них.

Другие вопросы по теме