Я хочу знать, какой случай быстрее, исходя из вашего опыта
Стол, содержащий более 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' и игнорируют другие повторные записи
Это правильно или я чего-то не хватает
Для ваших двух запросов оптимальным является table(product_id, shopname)
. Этот показатель может быть использован как, where
полностью пунктами.
Если у вас есть единственный указатель на имя shopname
, тогда в большинстве случаев второй запрос должен быть быстрее. То есть product_id
не находится в индексе и не является частью первичного ключа.
Если у вас очень мало названий магазинов, и таблица не вписывается в память, тогда вы можете оказаться в ситуации, называемой "тряска". Однако, помимо этого обстоятельства, индекс только для имени shopname
должен быть быстрее, но указанный выше индекс - тот, который вы, кажется, действительно хотите.
По моему опыту, это то, что я видел практически в RDBS SELECT SQL:
Когда я выбираю данные из таблицы без упомянутого значения индексированного столбца, для завершения запуска обычно требуется много времени, а иногда может привести к проблемам с производительностью.
Однако, когда я включил индексированный столбец, укажите номер клиента с полным диапазоном, который он волшебным образом работает быстрее!
Таким образом, мой ответ будет заключаться в использовании SQL.2, поскольку он быстрее.
SQL.1) Engineer sql не имеет понятия, с чего начать, чтобы он выполнял сканирование табличного пространства.
SQL.2) У движка sql есть что начать, и он выполняет индексированное сканирование, которое быстрее в практичности.
Однако может быть неверным во всех случаях, это зависит от того, как ваши данные были разработаны... может быть случай, когда SQL.1 работает быстрее, поскольку сканирование табличного пространства имело запись на самой первой странице, тогда как индексированное сканирование должно было появиться до магазина, а затем получить продукт. В любом случае для общего эффективного решения лучше работать с SQL2.
Надеюсь, поможет :)
product_id
тоже