Поддерживают ли какие-либо базы данных автоматическое создание индекса?

Почему базы данных не индексируют таблицы автоматически в зависимости от частоты запросов? Существуют ли какие-либо инструменты для анализа базы данных и запросов, которые она получает, и автоматического создания или, по крайней мере, предложения, какие индексы создавать?

Меня особенно интересует MySQL, но мне были бы любопытны и другие базы данных.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
26
0
8 597
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Для этого есть инструменты.

Для MS SQL используйте профилировщик SQL (для записи активности в базе данных) и помощник по настройке ядра СУБД (SQL 2005) или мастер настройки индекса (SQL 2000), чтобы проанализировать действия и рекомендовать индексы или другие улучшения.

Google App Engine делает это (см. Файл index.yaml).

Ответ принят как подходящий

Существуют оптимизаторы баз данных, которые можно включить или присоединить к базам данных, чтобы предлагать (а в некоторых случаях выполнять) индексы, которые могут помочь.

Однако на самом деле это не тривиальная проблема, и когда эти средства впервые появились, пользователи иногда обнаруживали, что они фактически замедляют работу их баз данных из-за плохой оптимизации.

Наконец, в отрасли есть много денег для архитекторов баз данных, и они предпочитают статус-кво.

Тем не менее, базы данных становятся более интеллектуальными. Если вы используете профилировщик SQL-сервера с сервером Microsoft SQL, вы найдете способы ускорить работу своего сервера. В других базах данных есть аналогичные профилировщики, и есть сторонние утилиты для выполнения этой работы.

Но если вы пишете запросы, надеюсь, вы знаете достаточно о том, что делаете, чтобы индексировать нужные поля. Если нет, то правильные индексы, вероятно, меньшая из ваших проблем ...

-Адам

Какое глупое заявление: «архитекторы баз данных предпочитают статус-кво». Да, мы большой картель, который пресекает все попытки самоиндексирования баз данных. Например, простое устройство, которое вы добавляете к своей машине, чтобы получить 100 миль на галлон, которые нефтяные компании скрывают от нас.

Mark Brady 24.10.2008 18:55

@ Адам Дэвис: «Но если вы пишете запросы, надеюсь, вы знаете достаточно о том, что делаете, чтобы индексировать правильные поля. Если нет, то наличие правильных индексов, вероятно, будет наименьшей из ваших проблем» - отсутствие правильные индексы описывают значительную часть всех существующих баз данных ...

Mitch Wheat 20.01.2009 16:29

Простой сценарий SQL здесь выводит собственные внутренние метрики SQL Server со списком индексов и предполагаемой выгодой от их создания - работает в 2005, 2008 и 2012 годах: blogs.msdn.com/b/bartd/archive/2007/07/19/…

Chris Moschini 14.02.2013 05:28

MS SQL 2005 также поддерживает внутреннюю ссылку предлагаемых индексов для создания на основе данных об использовании. Он не такой полный и точный, как советник по настройке, но работает автоматически. Для получения дополнительной информации изучите dm_db_missing_index_groups.

Я согласен с тем, что Адам Дэвис говорит в своем комментарии. Я добавлю, что если бы существовал такой механизм для автоматического создания индексов, наиболее распространенной реакцией на эту функцию было бы: «Это хорошо ... Как мне ее выключить?»

Это лучший вопрос, который я видел в stackoverflow. К сожалению, у меня нет ответа. Bigtable Google автоматически индексирует правильные столбцы, но BigTable не допускает произвольных объединений, поэтому проблемное пространство намного меньше.

Единственный ответ, который я могу дать, таков:

Однажды кто-то спросил: «Почему компьютер не может просто проанализировать мой код, скомпилировать и статически ввести фрагменты кода, которые выполняются чаще всего?»

Люди решают эту проблему сегодня (например, Tamarin в FF3.1), и я думаю, что "автоиндексирование" реляционных баз данных - это тот же класс проблем, но это не такой приоритет. Через десять лет добавление индексов в базу данных вручную будет считаться пустой тратой времени. На данный момент мы застряли в мониторинге медленных запросов и запущенных оптимизаторов.

Если бы был один правильный ответ, база данных уже сделала бы это. Всегда есть компромисс. У вас может быть сотни индексов, и запросы всегда будут выполняться быстро, но вставки и обновления будут перетаскивать. Как лучше? Если ваш запрос выполняется часто, это не означает, что это самая важная для вас работа.

Mark Brady 24.10.2008 19:03

@Mark Brady: внимание: это всегда компромисс.

Mitch Wheat 20.01.2009 16:26

Этот ответ был написан в 2008 году ... это почти 2018 год, и мы все еще находимся там, где были тогда ... добавление ручных индексов и поиск в Google, чтобы увидеть, было ли какое-либо движение в этом пространстве. Безумно правда?

degenerate 22.11.2017 19:07

@degenerate Прошло уже больше десяти лет ... возможно, стоит обновить ответ, указав «два десятилетия», или перечислить текущие возможности (нет?).

beppe9000 19.09.2019 12:13

Отчасти причина может заключаться в том, что индексы не просто дают небольшое ускорение. Если у вас нет подходящего индекса для большой таблицы, запросы могут выполняться так медленно, что приложение становится полностью непригодным для использования, и, возможно, если оно взаимодействует с другим программным обеспечением, оно просто не будет работать. Поэтому вам действительно нужно, чтобы индексы были правильными, прежде чем вы начнете пытаться использовать приложение.

Кроме того, вместо того, чтобы создавать индекс в фоновом режиме и еще больше замедлять работу во время его создания, лучше определить индекс до того, как вы начнете добавлять значительные объемы данных.

Я уверен, что мы получим больше инструментов, которые будут брать образцы запросов и определять, какие индексы необходимы; также, вероятно, в конечном итоге мы получим базы данных, которые будут работать так, как вы предлагаете, отслеживать производительность и добавлять индексы, которые, по их мнению, необходимы, но я не думаю, что они станут заменой для начала с правильных индексов.

Я думаю, что в блоге MS SQL есть сценарий со сценарием для предложения индексов в SQL 2005, но я не могу найти точный сценарий прямо сейчас! Это как раз то, что я помню из описания. Вот ссылка на дополнительную информацию http://blogs.msdn.com/bartd/archive/2007/07/19/are-you-using-sql-s-missing-index-dmvs.aspx

PS только для SQL Server 2005 +

Кажется, что у MySQL нет удобного профилировщика. Может быть, вы хотите попробовать что-то вроде это, класса php, основанного на профилировщике MySQL.

Да, некоторые движки поддерживают автоматическое индексирование. Одним из таких примеров для mysql является Infobright, его движок не поддерживает «обычные» индексы, а вместо этого неявно индексирует все - это механизм хранения на основе столбцов.

Поведение таких движков имеет тенденцию сильно отличаться от того, что ожидают разработчики (и да, вам не нужно быть РАЗРАБОТЧИКОМ, чтобы даже думать об использовании Infobright; это не замена плагина для стандартного движка).

SimpleDB от Amazon имеет автоматическую индексацию всех столбцов в зависимости от вашего использования:

http://aws.amazon.com/simpledb/

Однако у него есть и другие ограничения:

  • Это хранилище ключей и значений, а не RDB. Очевидно, это означает медленное соединение (и отсутствие встроенной поддержки соединения).
  • Он имеет ограничение на размер таблицы 10 ГБ. Существуют библиотеки, которые будут обрабатывать разбиение больших данных за вас, хотя это блокирует вас в способе работы этой библиотеки, что может иметь свои собственные проблемы.
  • Он хранит все значения в виде строк, даже чисел, что делает сортировку столбца с 1,9, а 10 получается как 1,10,9, если вы не используете библиотеку, которая взламывает это с помощью нулевого заполнения. Это также влияет на отрицательные числа.

Предел в 10 ГБ больше, чем многие могут предположить, поэтому вы можете продолжить его для простого сайта, который вы планируете переписать, если он когда-либо станет большим.

К сожалению, такого рода автоматическая индексация не попала в DynamoDb, который, похоже, заменил его - они даже не упоминают SimpleDb в своем списке продуктов, вы должны найти его по старым ссылкам на него.

Другие вопросы по теме