Що таке статистика баз даних і як я можу отримати від них користь?


18

Я чув згадки про статистику, яку за замовчуванням зберігає SQL Server. Що вони відстежують, і як я можу використовувати цю інформацію для вдосконалення своєї бази даних?

Відповіді:


21

Статистика просто є формою динамічних метаданих, яка допомагає оптимізатору запитів у прийнятті кращих рішень. Наприклад, якщо в таблиці є всього лише десяток рядків, то індекс не має сенсу робити пошук; вам завжди буде краще робити повне сканування таблиці. Але якщо ця сама таблиця виросте до мільйона рядків, то вам, ймовірно, буде краще використовувати індекс. Але якщо ви запитуєте цю таблицю у стовпчику, у якому є лише дуже мало унікальних значень (наприклад, це може бути стовпець "sex", що містить лише "M" або "F"), насправді FTS може бути кращим для цього випадку, тому що ви б Вам потрібно все-таки отримати блок для створення набору результатів. Тепер скажіть, що ваша таблиця становить 99% "M" і лише 1% "F", ми повинні FTS в одному випадку або використовувати індекс в іншому. Та сама таблиця, той самий запит, потенційно чотири різні плани запитів, залежно від вмісту таблиці. Такі речі є "статистикою", і вони індивідуальні для кожної бази даних - навіть дві бази даних з однаковою структурою таблиці та індексу матимуть різні статистичні дані.

Підсумовуючи це, в сучасному двигуні бази даних існує два види оптимізації запитів: перезапис SQL (оптимізація на основі правил, подібно до того, що компілятор переписує свій C, щоб зробити його більш ефективним) та вибір правильного шляху до даних (оптимізація на основі витрат , як компілятор JIT, що визначає точки доступу під час виконання). Про це вам потрібно потурбуватися лише в тому випадку, якщо ви помітили, що оптимізатор запитів робить щось очевидно неправильно (наприклад, вибір FTS, коли ви знаєте, що індекс буде кращим).


2
+1 Я не міг би це краще пояснити. Важливо пам’ятати, що статистика корисна лише в тому випадку, якщо вони постійно оновлюються. Це можна зробити за допомогою автоматичного оновлення статистики або регулярно запланованого (щоночі / щотижня) команди оновлення статистики. Крім того, відновлення індексу автоматично виконає оновлення статистики.
Метт

5

Вони використовуються оптимізатором запитів (Whitepaper на MSDN) для відстеження розподілу значень в індексах та / або стовпцях.

Ваша єдина проблема - регулярне оновлення : просто залиште двигун БД, щоб виконувати його роботи


2
Не завжди. Бувають випадки, коли створення статистики вручну може допомогти виконати запити.
mrdenny

@mrdenny: Як часто ви робили це в реальному житті? Дуже рідко. У мене немає IIRC. Якщо йому потрібна статистика, можна стверджувати, що їй потрібен індекс, який так чи інакше має статистику. Ви можете створювати статистику стовпців лише відповідно до CREATE STATISTICS . Зважаючи на те, що ОП довелося запитати про статистику, я б сказав, що це справедливо робити.
gbn

1
Я робив це пару разів, але не часто. Я заперечував проти вашої заяви "Ваша єдина проблема - регулярно оновлювати", оскільки оновлення статистики - не єдине.
mrdenny
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.