Альтернативы колонкам с низким количеством элементов (и бессмысленным индексам) в MySQL? - PullRequest
0 голосов
/ 10 ноября 2010

Так что у меня есть MySQL таблица для фотографий на моем сайте.Каждая фотография привязана к одному из двух наборов объектов, поэтому имеет две колонки;nEntity1FK, nEntity2FK.

Ровно один из этих столбцов всегда ненулевой в каждой строке.Таким образом, около 50% строк имеют значение «0» в nEntity1FK, и около 50% имеют значение «0» в nEntity2FK.

Пока все хорошоПока я не добавлю предложение WHERE nEntity1FK=0.Вещи внезапно становятся довольно медленными, даже если у меня есть LIMIT 0,50, чтобы пойти с этим.

Я понимаю, почему.Я понимаю, что показатели низкого кардинальности плохие и обычно не привыкают.Какая альтернатива, хотя?Единственное, о чем я могу думать, - это хранить всю информацию о моих фотографиях в 2 отдельных таблицах вместо одной (и иметь представление, которое объединяет их вместе для запросов, которые нуждаются в обеих).Это кажется мне беспорядочным / хлопотным, есть ли лучший вариант?

Спасибо всем.

1 Ответ

1 голос
/ 10 ноября 2010

Решением будет использование растрового индекса, но, как я знаю, MySql его не поддерживает.Можно ли разделить данные на две таблицы?Один, где WHERE nEntity1FK = 0 и один, где WHERE nEntity1FK = 1

...