Какое снижение производительности этого запроса django order_by? - PullRequest
1 голос
/ 08 июля 2011
MyModel.objects.all().order_by('-timestamp')

В метке времени есть уникальный ключ и еще один столбец:

`code` varchar(3) NOT NULL,
`timestamp` date NOT NULL,
 UNIQUE KEY `exchangerate_currency_70883b95_uniq` (`code`,`timestamp`)

Все, что мне нужно, это получить последнюю строку в таблице.Запрос достигает этого, но я думаю о будущем, когда он вырастет до 100К строк.Есть ли явные проблемы с производительностью с этим запросом и схемой?

Ответы [ 2 ]

0 голосов
/ 08 июля 2011

Поскольку ваш запрос относится к коду и метке времени, индекс нельзя использовать, если в предложении WHERE нет кода (и вы увидите filesort в результатах explain). если есть условие code=, запрос будет достаточно быстрым. Однако, если у вас есть более 100 000 записей, соответствующих части запроса, и вы хотите упорядочить по метке времени, это будет очень быстро, если вы ограничите метку времени, скажем, последние несколько дней (вы должны выбрать лимит на основе вашего приложения).

0 голосов
/ 08 июля 2011

Не видя ваш полный запрос и вашу схему, невозможно сделать больше, чем спекулировать.

Но ... Я считаю, что порядок столбцов в многостолбцовом индексе в MySQL важен. Это будет означать, что ваш индекс (код, метка времени), скорее всего, непригоден для упорядочения по метке времени. Если вместо этого вы измените порядок на (отметка времени, код), он, вероятно, будет использоваться для отметки времени ORDER BY, однако может ухудшить производительность для других запросов.

Если для вашего использования требуется индекс для обоих, вам может потребоваться создать второй индекс только для столбца отметки времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...