Croaker Опиши конкретную задачу, для которой тебе понадобилось так оптимизировать базу
Позволю себе описать:
Есть таблица где хранится дерево каталогов, в нем сортировка своя, и трогать её не будем, а есть вторая таблица записи которой относатся к разным узлам дерева. Причем к узлу может относится разное количество записей. Как производить их сортировку?
Создаем дополнительно поле sort в котором мы указываем свой(!) порядок для каждого узла:
id | title | category | sort
1 | title1 | 1 | 1
2 | title2 | 1 | 2
3 | title3 | 1 | 3
4 | title4 | 2 | 1
5 | title5 | 2 | 2
6 | title6 | 2 | 3
7 | title7 | 2 | 4
8 | title8 | 3 | 1
9 | title9 | 3 | 2
10 | title10 | 4 | 1
...
Добавляя дополнительные записи в узел, мы просто бепем максимальное значение поля sort для данного узла и устанавливаем на 1 большую
Перемещение порядка скажем на 1 пункт вверх (вниз) происходит учень просто: в одной записе sort уменьшеем на 1 в другой увеличиваем...
Все работает прекрасно до того момента пока мы не начнем удалять записи, тогда у нас между некоторыми записями разница sort будет больше чем еденица, и соответсвенно наш замечательный запрос перемещения записи работать не будет. мало того, испортит весь порядок...
Когда запись удаляется одна, проблем особых нет: просто уменьшаем поле sort последующих записей группы на 1. А если записией удаляется сразу несколько, причем не подряд, а выборочно из определенного узла? Тогда просто проводим подобие индексации поля sort на восстановление порядка.
Вообщем-то вся трабла возникает из-за запроса перемещения +-1 поля sort. Да еще если мы перемещаем запись на несколько пунктов вверх (вниз)...
К id судя по всему, я надеюсь, в данном вопросе это поле не имеет никакого значения...