2013-07-14 3 views
0

Я не уверен, что составной индекс - правильное слово; я имею в виду, что у меня есть индекс, состоящий из более чем одного столбца.Необычное поведение с добавлением двух составных индексов в одной таблице

Проблема:

Мой первичный ключ состоит из двух колонок и они прекрасно работают; columnA и columnB. У меня возникают проблемы, когда я пытаюсь создать еще один индекс в той же таблице, который состоит из двух столбцов и столбцов. Как только я создаю 2-й индекс, он берет верх и становится кластеризованным индексом, поэтому таблица упорядочивается им, сначала игнорируется индекс первичного ключа.

Возможное решение:

Я хочу таблицу, упорядоченную по первому индексу на Columna и ColumnB, но я использую 2-й индекс для других целей. Чтобы решить эту проблему, я мог бы дублировать данные во второй таблице, где ColumnA и ColumnC являются единственным индексом, но я не хочу этого делать, если его можно избежать.

System Info: MySQL

ответ

1

В MySQL (и любой другой SQL двигатель по этому вопросу), нет никакой гарантии, что ваша таблица заказана конкретного заказа. Единственный способ обеспечить заказ - использовать статью ORDER BY.

Теперь, почему заказ не гарантируется, если вы не используете ORDER BY: при вставке или удалении строк сервер может повторно использовать «отверстия» для новых вставок. Кроме того, сервер может сначала доставлять строки из кеша или от того, где сейчас находится голова диска, если это повышает производительность - это может быть особенно полезно, если вы используете LIMIT без ORDER BY.

Итак, длинный рассказ короткий, просто всегда используйте ORDER BY в своих вариантах, и ваша проблема исчезнет.

+0

У меня создалось впечатление, что каждая таблица имеет кластеризованный индекс, а индекс - это то, как строки физически выкладываются на диск. Когда я выбираю все на столе, возвращаемые строки всегда отражают это. Не используется ли ORDER BY, если вы хотите пойти против стандартной сортировки? –

+1

@UsmanMutawakil Нет, это неправда - по крайней мере, когда дело доходит до MySQL. Если 'order by' отсутствует, db может возвращать строки в любом порядке. – jcsanyi

+0

Я вижу. Поэтому мне нужно будет добавить ORDER BY явно для вставок –

Смежные вопросы