Как и в большинстве вопросов с базой данных, это зависит от: -)
На самом деле его нельзя удалять при всех обстоятельствах. Если у вас есть запрос, который использует только code
в предложении where
, возможно, что использование subject_x1
все равно будет превосходить subject_x2
только потому, что нужно будет прочитать меньше данных индекса.
Крайний пример, скажем, что code
- это char(2)
, а status
- это символ (4094) `. Если у вас есть запрос:
select code from tbl where code > 'dd' and code < 'gg';
Скорее всего, это приведет к сканированию только по индексу, поскольку нет абсолютно никакой причины переходить к таблице. Если вы используете subject_x1
и читаете в 4K-блоках из своего индекса, вы можете вводить пару тысяч кодов при каждом чтении.
Используя subject_x2
, каждое чтение дает вам только один код (и, возможно, потерянный статус). Это огромная разница в производительности.
Однако, и я не могу подчеркнуть это достаточно, Мера, не угадай!
Профилируйте ваши запросы (и обновления), используя оба индекса, чтобы увидеть, какие из них работают лучше, и делать это с репрезентативными данными. Если вы обнаружите, что subject_x1
дает вам лучшую производительность для некоторых запросов, оставьте это. Это повлияет на скорость обновления / вставки и требования к хранилищу, но вы обнаружите, что в общем случае это не имеет значения, поскольку:
- Подавляющее большинство баз данных читаются гораздо чаще, чем пишутся; и
- большинство жалоб на базы данных связано со скоростью, а не с объемом памяти.