select count (*) занимает значительно больше времени, чем select * для того же предложения "где"?

Я считаю, что выборка (*) занимает значительно больше времени, чем выборка * для запросов с тем же предложением где.

В рассматриваемой таблице содержится около 2,2 миллиона записей (назовите это подробно). У него есть поле внешнего ключа, связывающее другую таблицу (maintable).

Этот запрос занимает около 10-15 секунд:

select count(*) from detailtable where maintableid = 999

Но это занимает секунду или меньше:

select * from detailtable where maintableid = 999

ОБНОВЛЕНИЕ - было предложено указать количество записей. Это 150

ОБНОВЛЕНИЕ 2 Вот информация, когда используется ключевое слово EXPLAIN.

Для SELECT COUNT (*) столбец EXTRA сообщает:

Using where; Using index

KEY и POSSIBLE KEYS имеют ограничение внешнего ключа в качестве значения.

Для запроса SELECT * все то же самое, но EXTRA просто говорит:

Using Where

ОБНОВЛЕНИЕ 3 Попытка ОПТИМИЗАЦИЯ ТАБЛИЦЫ, и это все равно не имеет значения.

Ответ 1

Try

select count(PRIKEYFIELD) from detailtable where maintableid = 999
  • count (*) получит все данные из таблицы, а затем подсчет строк, что означает, что у него больше работы.
  • Использование поля первичного ключа означает, что он использует свой индекс и должен работать быстрее.

Ответ 2

Я согласен с @Rohit, выберите count (1) из table_name где _condition; самый быстрый

Ответ 3

Нить некро!

Сумасшедшая идея... В некоторых случаях, в зависимости от планировщика запросов, размера таблицы и т.д. И т.д., Индекс можно использовать на самом деле медленнее, чем не использовать индекс. Так что если вы получите свой счет без использования индекса, в некоторых случаях это может быть быстрее.

Попробуй это:

SELECT count(*) 
  FROM detailtable 
 USING INDEX ()
 WHERE maintableid = 999

Ответ 4

SELECT count(*)

с этим синтаксисом нет проблем, вы можете сделать это с любой таблицей. Основной проблемой в вашем сценарии является правильное использование INDEX и применение условия [WHERE] к вашему поиску. Попробуйте перенастроить свой индекс, если у вас есть такая возможность.

Если стол слишком большой, да, это может занять время. Попробуйте проверить статью блокировки MyISAM.

Ответ 5

Поскольку таблица содержит 2,2 миллиона записей, подсчет может занять время. Технически, MySQL должен найти записи и затем посчитать их. Это дополнительная операция, которая становится важной с миллионами записей. Единственный способ сделать это быстрее - это кэшировать результат в другой таблице и обновлять его за кулисами.

Ответ 6

Или просто попробуйте

select count(1) from table_name where _condition;

select count('x') from table_name where _condition;