Я б подумав, що бази даних будуть достатньо знати про те, з чим вони стикаються часто, і зможуть відповісти на вимоги, які ставлять перед ними, щоб вони могли вирішити додавати індекси до високо запитуваних даних.
UNIQUE
обмеження.
Я б подумав, що бази даних будуть достатньо знати про те, з чим вони стикаються часто, і зможуть відповісти на вимоги, які ставлять перед ними, щоб вони могли вирішити додавати індекси до високо запитуваних даних.
UNIQUE
обмеження.
Відповіді:
Оновлення
Це зараз реалізовано в SQL Server Azure. Це формує рекомендації
та управління індексами може бути налаштовано як автоматичне .
Увімкнути автоматичне управління індексом
Ви можете встановити Радник баз даних SQL автоматично реалізовувати рекомендації. Як тільки рекомендації стануть доступними, вони будуть автоматично застосовані. Як і у всіх операціях з індексом, якими керує служба, якщо вплив на продуктивність негативний, рекомендація буде скасована.
Оригінальний відповідь
У деяких базах даних вже (вид) індекси створюються автоматично.
У SQL Server план виконання іноді може включати в себе оператор Index Spool, де RDBMS динамічно створює індексовану копію даних. Однак ця котушка не є стійкою частиною бази даних, яка зберігається синхронізовано з вихідними даними, і її неможливо розділити між виконанням запитів, тобто виконання таких планів може закінчитися неодноразовим створенням та видаленням тимчасових індексів на ті самі дані.
Можливо, в майбутньому RDBMS матимуть здатність динамічно падати та створювати стійкі індекси відповідно до завантаженості.
Процес оптимізації індексу зрештою є лише аналізом витрат та вигод. Хоча це правда, що люди можуть мати більше інформації про відносну важливість запитів у робочому навантаженні в принципі, але немає причин, чому ця інформація не могла б бути доступною для оптимізатора. У SQL Server вже є регулятор ресурсів, який дозволяє класифікувати сеанси в різні групи навантаження з різним розподілом ресурсів відповідно до пріоритету.
Відсутній показник DMV, згаданий Кеннетом, не планується реалізовувати наосліп, оскільки вони враховують лише переваги конкретного запиту та не намагаються врахувати вартість потенційного індексу для інших запитів. Він також не консолідує аналогічні відсутні індекси. наприклад, вихід цього DMV може повідомити про відсутніх індексах на A,B,C
іA,B INCLUDE(C)
Деякі актуальні проблеми з ідеєю є
Мабуть, розумно очікувати, що точність моделей витрат з часом поліпшиться, але точка 2 виглядає складніше для вирішення, а точка 3 по суті нерозв'язна.
Тим не менш, напевно, переважна більшість установ не перебувають у цій ідеалізованій ситуації з кваліфікованими кадрами, які постійно контролюють, діагностують та передбачають (або принаймні реагують на) зміни навантаження.
Проект AutoAdmin в Microsoft Research працює з 1996 року
Мета цього проекту - зробити бази даних самонастроєними та самоуправляючими, використовуючи знання робочого навантаження
На домашній сторінці проекту перелічено декілька інтригуючих проектів. Одне особливо актуальне для цього питання
Ще одна цікава проблема виникає, коли немає доступних баз даних (наприклад, вбудована база даних або малий бізнес). У таких сценаріях може стати важливим підхід безперервної настройки індексу з низьким дотиком. Ми дослідили рішення ... [in] " Інтернет-підхід до настройки фізичного дизайну " в ICDE 2007.
Автори констатують
З дедалі більш поширеними функціями СУБД, такими як індекси в Інтернеті, привабливим є вивчення більш автоматичних рішень проблеми фізичного дизайну, які сприяють розвитку сучасного рівня.
У статті представлений алгоритм
Основними його характеристиками є:
- По мірі оптимізації запитів ми визначаємо відповідний набір кандидатських індексів, які б підвищили ефективність. Ця функція дозволяє обробці запитів тривати паралельно з індексами, які будуються у фоновому режимі.
- Під час виконання ми відстежуємо потенційні вигоди, які ми втрачаємо, не маючи таких кандидатських індексів, а також корисність існуючих індексів за наявності запитів, оновлень та обмежень місця.
- Після того, як ми наберемо достатньо «доказів», що фізична зміна дизайну є корисною, ми автоматично запускаємо створення індексів чи їх видалення.
- Принцип нашої проблеми в Інтернеті означає, що ми загалом будемо відставати від оптимальних рішень, які знають майбутнє. Однак, ретельно вимірюючи докази, ми гарантуємо, що ми не зазнаємо серйозних "пізніх" рішень, тим самим обмежуючи суму понесених збитків
Реалізація алгоритму дозволяє здійснювати заглушку у відповідь на зміни завантаження сервера, а також може припинити створення індексу, якщо під час створення зміни робочого навантаження та очікувана користь опускаються нижче того, що вважається доцільним.
Висновок авторів на тему " Інтернет проти традиційної фізичної настройки".
Онлайн-алгоритми в цій роботі корисні, коли DBA не впевнені в майбутньому поведінці робочого навантаження або не мають можливості робити всебічний аналіз чи моделювання. Якщо DBA має повну інформацію про характеристики робочого навантаження, то статичний аналіз та розгортання за допомогою існуючих інструментів (наприклад, [2, 3]) буде кращою альтернативою.
Висновки тут схожі з висновками в іншому документі " Налаштування індексів, керований автономними запитами"
Наш підхід не може обіграти радника з індексів, якщо все навантаження відомо заздалегідь. Однак у динамічних середовищах, що змінюються та змінюються навантаженнями, підхід, орієнтований на запити, дає кращі результати.
Розроблений вами індекс дизайн - це щось більше мистецтво, ніж наука. RDBMS недостатньо розумний для прийняття загальних навантажень і розробки стратегії інтелектуального індексування. Це залежить від втручання людини (читайте: DBA), щоб проаналізувати навантаження і визначити, що є найкращим підходом.
Якщо б не було покарання мати індекси, то було б підходом рушниці просто додати нескінченну кількість індексів. Але оскільки модифікація даних (INSERTS, UPDATES і DELETES) впливає на включені індекси в таблиці, то ця змінна накладні витрати цих індексів.
Людському дизайну та стратегії потрібно інтелектуально створювати індекси, які дозволять максимально підвищити ефективність читання, маючи при цьому найменший обсяг зміни даних.
Насправді є деякі бази даних, які роблять це. Наприклад, BigTable від Google та SimpleDB Amazon автоматично створюють індекси (хоча це не RDBMS) . Також є щонайменше один двигун MySQL RDBMS, який робить це. SQL Server також відслідковує індекси, які, на його думку, слід створити , хоча це не так далеко, як власне їх створення.
Проблему напрочуд складно виправити, тому не дивно, що більшість баз даних не створюють їх автоматично (BigTable / SimpleDB відходить від цього, оскільки вони не дозволяють довільних приєднань, що значно спрощує справи) . Крім того, створення індексів на ходу - це трудомісткий процес, який вимагає ексклюзивного доступу до всієї таблиці - напевно, це не те, що ви хочете робити, поки стіл знаходиться в режимі он-лайн.
Однак, з огляду на кількість веб - додатків ламповий там були написані любителями , які навіть не знають , що індекс є , я все ще думаю , що ця функція буде корисна для деяких людей.
rdbms
і я не думаю, що BigTable потрапляє в категорію.
Хоча вже є кілька обширних відповідей, вони, здається, спідничають навколо реальної відповіді: Індекси не завжди бажані.
З аналогією автомобіля, згаданою в коментарях, вам краще сказати, чому не всі машини оснащені екстремальними видами спорту? Частково це витрата, але це також зводиться до того, що багатьом людям не потрібні або хочуть низькопрофільні шини та жорстка підвіска; це зайво незручно.
Тож, можливо, у вас є 1000 читань на кожну вставку, чому б не створити автоматично створений індекс? Якщо таблиця широка і запити різноманітні, чому б не було декількох? Можливо, фіксація є критичною для часу, і читання не є; за обставин може бути неприйнятним сповільнювати вкладку. Можливо, ви працюєте з обмеженим дисковим простором, і ви не можете дозволити собі, щоб додаткові індекси потрапляли в наявний простір.
Справа в тому, що індекси не створюються автоматично, оскільки вони не є відповіддю на все. Проектування індексів - це не просто випадок сказати: "Ей, це пришвидшить мої читання", є й інші фактори, які слід врахувати.
Вони не розумні, вони є частиною коду. Кожного разу, коли ви вводите нові дані в базу даних, їй потрібно знайти нове місце розташування до неї та карту, щоб знайти їх, коли вони вимагаються. Індексація звучить простіше, ніж є, ви просто даєте нове число новому фрагменту даних? Ну а як бути, якщо наступний запит не про останній фрагмент даних, а про 36271 фрагменти раніше? Ви можете легко знайти його за допомогою свого індексу, правда? Але що робити, якщо запит включає таке слово, як "риболовля", яке можна знайти в старому 36271 шматку, виготовленому в 1997 році? Хо? Ні слова про риболовлю в старій статті.
Якщо дані надійшли до бази даних по черзі, вони могли б так проіндексуватися. Але проста індексація призведе до помилкових результатів та / або повільної продуктивності рано чи пізно ...