|
|
|
count(*) vs служебный ответ
|
|||
|---|---|---|---|
|
#18+
После выполнения любого select мускул отдает служебное сообщение сколько рядов он нашел. Чтобы узнать сколько рядов всего было найдено по сложному запросу достаточно регулярником убить конструкцию limit. Но в интернете пишут, что получение информации количества строк таким образом очень сильно грузит базу и по сути вычисления каждый раз проводятся дважды. В качестве лечения задачи производится агитация на использование select count(*) или select count(1) если есть вероятность подмешивания null-полей Следуя этой рекомендации все простые селекты удалось с легкостью вылечить обычной заменой регулярником всего, что расположено между select .... from, но для сложных запросов такой трюк не канает. Вопрос: есть ли хоть какой-то смысл для достижения экономии вычислительных ресурсов обертывать весь запрос в Код: sql 1. или в подобных случаях для получения количества записей проще действовать как и раньше - выполнять два раза, просто во втором случае подтирать limit регулярником? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2015, 14:04:22 |
|
||
|
count(*) vs служебный ответ
|
|||
|---|---|---|---|
|
#18+
У меня стойкое ощущение, что это недавно обсуждали. Там еще про SQL_CALC_FOUND_ROWS было. Если кратко, то нужно пробовать. В разных случаях разные варианты дают выигрыш. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2015, 14:14:18 |
|
||
|
count(*) vs служебный ответ
|
|||
|---|---|---|---|
|
#18+
Lumixselect count(*) или select count(1) если есть вероятность подмешивания null-полейПро null-поля ерунда какая-то. Ни count(*), ни count(1) не зависят от содержимого полей и от их статуса NULL/NOT NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2015, 14:16:21 |
|
||
|
count(*) vs служебный ответ
|
|||
|---|---|---|---|
|
#18+
miksoftУ меня стойкое ощущение, что это недавно обсуждали. Там еще про SQL_CALC_FOUND_ROWS было. Если кратко, то нужно пробовать. В разных случаях разные варианты дают выигрыш. Да, эти две темы к одной и той же "песне", но в данном случае более узкий и более конкретный вопрос про обертывание с count(*) Дает и оно что-то или не дает. Как бы Код: sql 1. vs Код: sql 1. Не хотел добавлять новое сообщение в той теме, иначе по старой доброй традиции этого форума, опять смешали бы люди, мухи, котлеты, варенье... В данном случае вопрос очень узкий - про конкретно обертывания, а не про стратегию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2015, 14:42:36 |
|
||
|
count(*) vs служебный ответ
|
|||
|---|---|---|---|
|
#18+
на всякий случай кину ссылку на ту тему, где обсуждались варианты стратегий с count(*) тема была очень полезной 18171516 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2015, 14:55:30 |
|
||
|
count(*) vs служебный ответ
|
|||
|---|---|---|---|
|
#18+
LumixКак бы Код: sql 1. vs Код: sql 1. Если вопрос ставить именно так узко, то я бы боролся за первый вариант, ибо в конкретных ситуациях они могут быть либо равны, либо первый быстрее (если оптимизатор решит материализовать подзапрос во втором запросе). Но не представляю такого, чтобы быстрее оказался второй запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2015, 15:35:49 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39090207&tid=1832563]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
91ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 414ms |

| 0 / 0 |
