Oracle
 sql >> база данни >  >> RDS >> Oracle

Как се изчислява коефициентът на клъстериране на Oracle Index

Съдържание

Какво е фактор за клъстериране на индекс на Oracle (CF)?

Коефициентът на клъстериране е число, което представлява степента, до която данните се разпределят на случаен принцип в таблица в сравнение с индексираната колона. Казано по-просто, това е броят на „блоковите превключватели“, докато четете таблица с помощта на индекс.

Това е важна статистика, която играе важна роля при изчисляването на оптимизатора. Използва се за претегляне на изчислението за сканирания диапазон на индекса. Когато коефициентът на клъстериране е по-висок, цената на сканирането на диапазона на индекса е по-висока

Добрият коефициент на клъстериране е равен (или близо) до стойностите на броя на блоковете на таблицата.

Лош фактор на групиране е равен (или близо) до броя на редовете в таблицата.

Как се изчислява CF?

Oracle изчислява коефициента на клъстериране, като прави пълно сканиране на индекса, обхождайки листните блокове от край до край. За всеки запис във всеки лист Oracle проверява абсолютния номер на файла и идентификатора на блока, получени от ROWID на индексираната стойност. Той поддържа текущ брой колко „различни“ блока съдържат редове с данни, посочени от индекса. Адресът на блокиране от първия запис се сравнява с адреса на блокиране от втория запис. Ако това е един и същ блок на таблица, Oracle не увеличава брояча. Ако блоковете на таблицата са различни, Oracle добавя един към броя. Този процес на броене продължава от запис до запис, като винаги сравнява предходния запис с текущия.

Горното е добър CF пример, тъй като CF е равен на броя на блоковете

Пример за лош фактор за групиране

Тук коефициентът на клъстериране е равен на брой редове

Този метод на броене има свой собствен неочакван резултат. Да предположим, че данните се попълват върху малък набор от блокове, но не в ред по отношение на индексния ключ, тогава набор от редове може да изглежда като над голям набор от блокове, когато може би има само няколко истински отделни блока . Така че CF би бил по-висок, но всъщност докосва много малко блокове. Този проблем може да бъде смекчен в 12c чрез използване на предпочитания на таблицата и посочване на табличния кеширан блок.

как да подобрим фактора на клъстериране в oracle

Повторното изграждане на индекс няма да има никакъв ефект върху фактора на клъстериране. Таблицата трябва да бъде сортирана и изградена отново, за да се намали коефициента на групиране.

Запитване за определяне на фактора на клъстериране 

CF се съхранява в речника на данните и може да се види от dba_indexes (или user_indexes).

Всъщност цялата статистика на индекса може да бъде намерена там

SELECT index_name, index_type, uniqueness, blevel, leaf_blocks, distinct_keys, avg_leaf_blocks_per_key,
avg_data_blocks_per_key, clustering_factor, num_rows, sample_size, last_analyzed, partitioned
FROM dba_indexes
WHERE table_name = 'ORDERS' ;

Как факторът за клъстериране на индекси на Oracle влияе върху плана на оптимизатора?

Факторът на клъстериране е основната статистика, която оптимизаторът използва за претегляне на пътищата за достъп до индекса. Това е приблизителен брой LIO към блокове на таблица, необходими за придобиване на всички редове, които отговарят на заявката по ред. Колкото по-висок е коефициентът на клъстериране, толкова повече LIO, които оптимизаторът ще изчисли, ще са необходими. Колкото повече LIO се изискват, толкова по-малко привлекателно и следователно по-скъпо ще бъде използването на индекса.

Свързана статия
Индекс на дялове на Oracle :Разбиране на индекса на дялове на Oracle, Какво представляват глобалните неразделени индекси?, Какво представляват локални индекси с префикс, локален индекс без префикс
намерете индекси в таблица в oracle :разгледайте тази статия, за да намерите запитвания за това как за да намерите индекси в таблица в oracle, избройте всички индекси в схемата, състояние на индекса, индексна колона
типове индекси в oracle :Тази страница се състои от информация за индекси на oracle, различни типове индекси в oracle с пример, как за създаване/пускане/промяна на индекса в Oracle
Виртуален индекс в Oracle :Какво е виртуален индекс в Oracle? Употреби, ограничения, предимства и как да се използва за проверка на план за обяснение в базата данни на Oracle, скрит параметър _USE_NOSEGMENT_INDEXES


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Списък със задачи

  2. Как да изпълните съхранена процедура на Oracle чрез връзка към база данни

  3. Как мога да изброя ВСИЧКИ грантове, които е получил потребител?

  4. Oracle String функции (пълен списък)

  5. Oracle изтрива редове от множество таблици