2015-08-21 1 views
-1

Это должна быть довольно регулярная операция: при получении записей из таблицы в БД мне нужно, чтобы они упорядочивались по убыванию даты создания. Но если я использую ключ AUTOINCREMENT, я могу также заказать по убыванию значения ключа.Заказать по дате времени DESC или заказать по основному ключу DESC?

Мой вопрос: что лучше?

  1. Какова эффективность, я знаю, что первичные ключи и поля данных используют разные типы индексов, которые эффективнее?
  2. Всегда ли они возвращают тот же результат? Используется ли клавиша AUTO-INCREMENT, когда она достигает максимума?
+1

В PostgreSQL нет полей 'AUTO_INCREMENT'. Я предполагаю, что вы имеете в виду «SERIAL», который является просто «INTEGER» с дефолтом? Кроме того, что заставляет вас думать, что они используют разные типы индексов? Оба являются только индексами b-tree. Если это «ПЕРВИЧНЫЙ КЛЮЧ», то это будет индекс «УНИКАЛЬНЫЙ», но они структурно одинаковы. –

+0

@CraigRinger Свертывает ли ключи SERIAL? Это что-то, о чем мне нужно беспокоиться? – NeoWang

+0

Они не обертываются. Тем не менее, нет гарантии, что упорядочение строк будет одинаковым на основе timestamp vs сгенерированного ключа, особенно если вы используете 'current_timestamp' вместо' clock_timestamp'. Если вы хотите заказать на основе нисходящего времени создания, закажите их на основе нисходящего времени создания, а не ключа. –

ответ

2

Я думаю, что вы должны четко определить отсортированные столбцы. Если нет, порядок результата может быть изменен, если вы обновите 1 строку данных