Вот что у меня есть:Составной ключа VS первичного ключа + не уникальный индекс
table content : cat_id product_id data1 data2 etc.
категория не является уникальной, очевидно. Идентификаторы продуктов уникальны.
2 queries : 1 -- SELECT * WHERE cat_id = :cat - must be as quick as possible 2 -- SELECT * WHERE product_id = :prodId In second select, I can add : AND cat_id = :cat
Что более эффективным?
- 1 - индекс (не единственный) на cat_id (хорошо для выбора 1)
- 2 - первичный ключ product_id (уникальный -> отлично подходит для выбора 2)
- 3 - индекс (не уникальный) на cat_id + PK на product_id (хорошо для 1 &-отдельно)
- 4 - ограничения уникальности с композитным [cat_id + product_id] (хорошо для 1 &-вместе)
- 5 - такое же, как 4, б ут определение композита PK
- 6 - композитный (4 или 5) + единый индекс/PK
Для получения дополнительной информации, я буду иметь около 20 продуктов в каждой категории и много категорий (скажем 3000) - И (как это уникально в таблице) ОДИН продукт принадлежит только ОДНОЙ категории - На самом деле это не кошки и продукты, то есть для простоты объяснения;)
спасибо!
Просто голова в варианте 4: если я правильно помню, MySQL может использовать первые части составного ключа. I.e .: Если вы определяете свои ключи как в варианте 4, а затем вы строите запрос с помощью WHERE cat_id = ..., MySQL может использовать индекс (не так с «WHERE product_id = ...»). http://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html – Sebastianb
@Sebastianb - Спасибо, это то, что я не знаю: как создаются, и позже используется - составные клавиши двигателя. Итак, скажем, в phpMyAdmin, ORDER, в котором мы устанавливаем строки при определении составного индекса, важно? [cat_id + product_id]! = [product_id + cat_id]? Я добавил 5-й вариант. добавление композита в PK все лучше, нет? –
До тех пор, пока у вас нет NULL кошек и продуктов, вы можете просто PK составной ключ, и я думаю, что все будет хорошо (проверьте здесь различия между уникальными индексами и PK: http://stackoverflow.com/questions/487314/primary -key или уникальный индекс). Однако, если вы хотите найти product_id, вы не будете использовать составной индекс, поэтому, я думаю, вам было бы лучше просто объявить product_id как PK и cat_id как индекс. – Sebastianb