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;