У меня есть запрос, который даст мне средний размер в байтах для данного имени таблицы.
Я намереваюсь использовать его в качестве оценки для набора результатов sql, например, 100-байтовая таблица имеет 100 строк, она будет работать, каждая строка может составлять 1 байт. Следовательно, выборка в таблице с предложением where, которая возвращает 25 строк, может быть оценена как 25 байтов.
Это элементарный планировщик мощности. Который, посмотрев на другие возможные методы, я бы предпочел по сравнению со всем, что зависит от статистики.
Я попробовал приведенный ниже код, который отлично работает для 1 таблицы.
SELECT a.total_bytes / b.num_rows avg_row_size
FROM (SELECT SUM(bytes) total_bytes
FROM dba_extents
WHERE owner = 'KEVIN'
AND segment_name = 'KEVS_TABLE' ) a,
(SELECT COUNT(*) num_rows
FROM KEVS_TABLE) b
Тем не менее, я хотел бы, чтобы этот цикл прошел и дал результаты для всей загрузки таблиц. Я пробовал:
SELECT a.total_bytes / b.num_rows avg_row_size
FROM (SELECT SUM(bytes) total_bytes
FROM dba_extents
WHERE
segment_name in (select table_name from table_list) ) a,
(SELECT COUNT(*) num_rows
FROM table_list) b
Но это просто ничего не возвращает.
Есть какие-нибудь идеи, как заставить его возвращать значение для каждой строки в table_list?