|
|
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
XMLerНикакой. Окажись я на месте ТСа ответил бы 4378823478969123469. Пусть проверяют. Ну разница eсть. Пример. Разработчики тестируют Informatica workflow. Лог показывает чтение source идет со скоростью N строк в секунду. Это хорошо или плохо? Не зная числа строк в production source мы не можем эстраполировать время выполнения workflow в production. Так-что приходится давать разработчикам числo строк. Правда микроны тут не нужны и NUM_ROWS от dbms_stats вполне достаточно. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 13:41 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
SY, Но это обычно для 1-10 таблиц, а не для всей базы. 10-ки таблиц справочники с устоявшимся набором данных и число ВСЕХ строк в таблицах величина абстрактная но никому не нужная =(. Во всяком случае я не могу себе придумать задачу где мне такое может понадобиться. И что делать с вьюхами - ума не приложу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 14:21 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
SYXMLerНикакой. Окажись я на месте ТСа ответил бы 4378823478969123469. Пусть проверяют. .. приходится давать разработчикам числo строк. Правда микроны тут не нужны и NUM_ROWS от dbms_stats вполне достаточно. SY. Это если статистика собирается, а если разница count(*) vs NUM_ROWS >100K то не достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 15:47 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
murzusЭто если статистика собирается, а если разница count(*) vs NUM_ROWS >100K то не достаточно. А что мешает больше ресурсов выделять на сбор статистики? Что count постоянный гонять, что это, а от статистики может еще какая польза будет. Ну или вред. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 16:01 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
murzusЭто если статистика собирается, а если разница count(*) vs NUM_ROWS >100K то не достаточно. А это зависит от COUNT(*). Разница в 100K для таблицы в 100M роли не играет а вот для таблицы в 1M да, и если у тебя по такой растущей таблице статистика не сибирается то у тебя похоже куда больше проблем чем счет строк. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 16:03 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевmurzusЭто если статистика собирается, а если разница count(*) vs NUM_ROWS >100K то не достаточно. А что мешает больше ресурсов выделять на сбор статистики? Что count постоянный гонять, что это, а от статистики может еще какая польза будет. Ну или вред. :) Маэмо, що маэмо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 16:21 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
SYmurzusЭто если статистика собирается, а если разница count(*) vs NUM_ROWS >100K то не достаточно. А это зависит от COUNT(*). Разница в 100K для таблицы в 100M роли не играет а вот для таблицы в 1M да, и если у тебя по такой растущей таблице статистика не сибирается то у тебя похоже куда больше проблем чем счет строк. SY. Это был пример, таблиц куча , и разница не устраивает. Вы пытаетесь помочь решить задачу организационно, но цель топика найти техническое решение. Задача если что уже решена, хотел просто узнать -может кто-то уже сталкивался и как-то ускорил. Но пока ничего нет, кроме как считать индексы или методы типа бить таблицу и считать параллельно(мэп-редьюс). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 16:31 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
Да ради бога: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 19:55 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
orcl_1989Вариант с count(*) в oracle самый медленный, лучше использовать count(1) - я предпочитаю, хотя по производительности от count(ID) и count(поле) сильно не отличается. Между count(1) и count(*) нет разницы. Вот статья от Кайта: https://asktom.oracle.com/pls/apex/f?p=100:11:1337911574066::NO::P11_QUESTION_ID:1156159920245 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 16:58 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
murzusЭто был пример, таблиц куча , и разница не устраивает. Вы пытаетесь помочь решить задачу организационно, но цель топика найти техническое решение. Задача если что уже решена, хотел просто узнать -может кто-то уже сталкивался и как-то ускорил. Но пока ничего нет, кроме как считать индексы или методы типа бить таблицу и считать параллельно(мэп-редьюс). Ну еще вариант, завести регистровую таблицу с двумя столбцами (имя таблицы, кол-во строк) и прицепить к каждой таблице а БД триггер, который при инсерте будет инкременировать, при делите декрементировать кол-во в строке рестровой таблицы для соответствующей таблицы. Тогда простой селект по регистровой таблице будет мгновенно давать результат :) Но с правами только на селект не получится, разумеется. И это изврат, имхо. А все-таки какова была цель у этой задачи? Для чего это было нужно, если не секрет? И каково было таинственное уникальное решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 17:11 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
mishgaНу еще вариант, завести регистровую таблицу с двумя столбцами (имя таблицы, кол-во строк) и прицепить к каждой таблице а БД триггер, который при инсерте будет инкременировать, при делите декрементировать кол-во в строке рестровой таблицы для соответствующей таблицы.Открой для себя dba_tab_modifications, велосипедостроитель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 17:26 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
mishgaНу еще вариант, ... и все станут в очередь за номерком ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 17:30 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
dba_tab_modification я бы сказал неоднозначная штука. там без явного DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO она не то чтобы мгновенно обновляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 18:07 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
mishgaприцепить к каждой таблице а БД триггер Фи. Триггер может быть тихо отключен (как явно, так и в ходе direct-операции), после чего данные в "реестре" потеряют адекватность, никому ничего не сказав. Если уж очень хочется извратиться - слепите доменный индекс или агрегатное мат. вью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 18:31 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
Shtockdba_tab_modification я бы сказал неоднозначная штука. там без явного DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO она не то чтобы мгновенно обновляется.Неоднозначно то, что для минимизации дополнительных издержек надо идти на компромиссы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 19:04 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
Важно, чтобы топикстартер видел эти компромиссы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 10:21 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
mishgaНу еще вариант, завести регистровую таблицу с двумя столбцами (имя таблицы, кол-во строк) и прицепить к каждой таблице а БД триггер, который при инсерте будет инкременировать, при делите декрементировать кол-во в строке рестровой таблицы для соответствующей таблицы. Тогда простой селект по регистровой таблице будет мгновенно давать результат :) Но с правами только на селект не получится, разумеется. И это изврат, имхо. А все-таки какова была цель у этой задачи? Для чего это было нужно, если не секрет? И каково было таинственное уникальное решение? А все-таки какова была цель у этой задачи? - посчитать кол-во строк. Для чего это было нужно, если не секрет? -для расчета ресурсов. И каково было таинственное уникальное решение? - Никакого уникального, loop + execute immediate + count(*). Это долго отсюда и вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 10:53 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
Shtockdba_tab_modification я бы сказал неоднозначная штука. там без явного DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO она не то чтобы мгновенно обновляется. Тоже не подходит, нужно считать по факту, без затей и всяких "ловушек" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 10:56 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
murzus Для чего это было нужно, если не секрет? -для расчета ресурсов. А, извините, ресурсов чего? Если у меня таблица из 2 ID колонок - 10 млн строк и таблица с CLOB в 10 млн строк это разные ресурсы, как по мне, хоть и ответ одинаковый 10 млн. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 11:17 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
MaximaXXLmurzus Для чего это было нужно, если не секрет? -для расчета ресурсов. А, извините, ресурсов чего? Если у меня таблица из 2 ID колонок - 10 млн строк и таблица с CLOB в 10 млн строк это разные ресурсы, как по мне, хоть и ответ одинаковый 10 млн.Да ему до фонаря. Кретин задачу поставил - дебил задачу исполнил. Дальше хоть трава не расти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 11:20 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
MaximaXXLхоть и ответ одинаковый 10 млн.Пока считается каунт, пока считаются ресурсы по результатам каунтов, пока по результатам расчетов ... что-то предпринимается, строк у же не одинаково - в одной таблице 10000001, а в другой 9999999 строк. Бегом пересчитывать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 11:26 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
однако за время пути собака ...Пока считается каунт, пока считаются ресурсы по результатам каунтов, пока по результатам расчетов ... что-то предпринимается, строк у же не одинаково - в одной таблице 10000001, а в другой 9999999 строк. Бегом пересчитывать! если где-то удалилась запись, значит в какой-нибудь таблице она добавилась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 11:39 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
SYДа ради бога: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. SY. SY по скорости одинаково, но уже одним select-ом . Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2017, 17:38 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousагрегатное мат. вью. UNION ALL C Триггерами тоже забавно. Давайте тогда уже берите Кафку и стримьте дельту в Хадуп и будет реалтайм но латенси каунт :) (Хотя некоторые ентерпрайзы и не до такого додумываются) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2017, 01:09 |
|
||
|
Как ускорить select count(*) from table
|
|||
|---|---|---|---|
|
#18+
murzusSYДа ради бога: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. SY. SY по скорости одинаково, но уже одним select-ом . Спасибо. Насчет одного селекта, вроде бы и правильно, но улыбает =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2017, 09:55 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39526643&tid=1885148]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
92ms |
get tp. blocked users: |
2ms |
| others: | 204ms |
| total: | 486ms |

| 0 / 0 |
