Как Oracle выполняет операцию чтения? - PullRequest
4 голосов
/ 27 ноября 2011

Предположим, у нас есть таблица, которая содержит информацию о человеке.Столбцы, такие как NAME или SURNAME, являются небольшими (я имею в виду, что их размер не очень большой), но столбцы, которые содержат фотографию или, возможно, видео человека (столбцы BLOB-объектов), могут быть очень большими.Поэтому, когда мы выполним операцию выбора:

select * from person

, она получит всю эту информацию.Но в большинстве случаев нам нужно только получить имя или фамилию человека, поэтому мы выполняем этот запрос:

select name, surname from person

Вопрос : будет ли Oracle читать всю запись (включая столбцы BLOB-объектов) изатем просто отфильтровать столбцы с именами и фамилиями, или он будет только читать столбцы с именами и фамилиями?

Кроме того, даже если мы создадим отдельную таблицу для таких больших данных (фото и видео человека) и будем иметь внешний ключ дляэта таблица в личной таблице и мы хотим получить только фотографию, поэтому мы выполним этот запрос:

select photo 
from person p 
join largePesonData d on p.largeDataID = d.largeDataID 
where p.id = 1 

Будет ли Oracle читать всю запись в личной таблице и всю запись в largePesonData или просто читать столбец с фотографиейв большом PesonData?

1 Ответ

6 голосов
/ 27 ноября 2011

Oracle читает данные в блоках.Давайте предположим, что размер вашего блока составляет 8192 байта, а средний размер строки - 100 байтов - это означало бы, что каждый блок будет заполнять 8192/100 = 81 строк (это не совсем точно, поскольку из заголовка блока есть некоторые издержки - но япытаясь упростить задачу).

Поэтому, когда вы выбираете имя, фамилию от лица;На самом деле вы извлекаете хотя бы один блок со всеми его данными (81 строка), а позже, после его проверки, возвращаете только те данные, которые вы запрашивали.

Два исключения:

  1. Столбец BLOB - «выберите имя, имя от лица» не будет извлекать содержимое самого BLOB, поскольку столбцы BLOB содержат ссылку на фактический BLOB (который находится где-то еще в табличном пространстве или даже в TS-объекте-аннотере)
  2. Индексированные столбцы - если вы создали индекс для таблицы, используя имя и фамилию столбцов, возможно, что Oracle будет сканировать только этот конкретный индекс и извлекать только эти два столбца.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...