поиск по одному столбцу без индекса или два, один из которых имеет индекс

0

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

Стол, содержащий более 10 миллионов записей, запрашивается на основе двух случаев:

  • search1 в одном столбце product_id
  • search2 двумя столбцами shop_name (которое индексируется) и product_id

так будет так

search1 =    select * from table where product_id = 123456

search 2 = select * from table where shopname ='abz' and product_id = 123456 

второй поиск имеет индекс магазина

какой из них будет быстрее?

Если я понимаю, как работают индексы, вторая быстрее

поскольку он будет искать только идентификаторы, которые имеют shopname = 'abz' и игнорируют другие повторные записи

Это правильно или я чего-то не хватает

  • 0
    Всегда старайтесь избегать запросов к таблице столбцов, которая не проиндексирована. Так что индекс product_id тоже
  • 0
    @juergen d Насколько я знаю, наличие большого количества индексов замедлит вставку и удаление. Так вы предлагаете сделать 2 из них проиндексированы? это повлияет на вставку, так как я ежедневно вставляю слишком много данных в эту таблицу или достаточно одного из столбцов?
Теги:
database
search

2 ответа

1
Лучший ответ

Для ваших двух запросов оптимальным является table(product_id, shopname). Этот показатель может быть использован как, where полностью пунктами.

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

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

  • 0
    В моем случае название магазина будет дублироваться много раз от 100 до неограниченного количества раз, поскольку в каждом магазине может быть много товаров, но для product_id, уникального для всех магазинов, вы предлагаете использовать индексную таблицу из нескольких столбцов (product_id, shopname), как вы упоминали?
  • 0
    @JoumanaIssa. , , Да, вы должны использовать многостолбцовый индекс, если это запросы, которые вы хотите выполнить.
0

По моему опыту, это то, что я видел практически в RDBS SELECT SQL:

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

Однако, когда я включил индексированный столбец, укажите номер клиента с полным диапазоном, который он волшебным образом работает быстрее!

Таким образом, мой ответ будет заключаться в использовании SQL.2, поскольку он быстрее.

SQL.1) Engineer sql не имеет понятия, с чего начать, чтобы он выполнял сканирование табличного пространства.

SQL.2) У движка sql есть что начать, и он выполняет индексированное сканирование, которое быстрее в практичности.

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

Надеюсь, поможет :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню