我在为查询构建正确的索引时遇到问题.
我有这样的模型:
from django.db import models
class Record(models.Model):
user = models.ForeignKey(User, db_index=True, related_name='records')
action = models.ForeignKey(Action, db_index=True)
time = models.DateTimeField(db_index=True, default=timezone.now)
class Meta:
index_together = (
('user', 'time'),
('action', 'user', 'time'),
)
Run Code Online (Sandbox Code Playgroud)
如您所见,此模型有两个自定义索引.
如果我想获得与特定用户相关的所有记录,过滤方式time,我使用此查询:user.records.filter(time__gt=some_moment).它工作正常并使用第一个自定义索引(根据Django调试工具栏).
现在,在我的情况下,结果必须按顺序排序action.我用这个查询:user.records.filter(time__gt=some_moment).order_by('action').
但是,尽管存在适当的索引,但不使用它.
我究竟做错了什么?如何为此查询构建正确的索引?
Django版本= 1.8.4,应用了所有迁移,数据库后端= mysql.
UPD:有我的疑问:
SELECT *** FROM `appname_record`
WHERE (`appname_record`.`user_id` = 1896158 AND
`appname_record`.`time` > '2015-10-19 06:39:30.992790')
ORDER BY `appname_record`.`action_id` ASC
Run Code Online (Sandbox Code Playgroud)
有完整的django工具栏说明:
ID: 1
SELECT_TYPE: SIMPLE
TABLE: appname_record
TYPE: ALL
POSSIBLE_KEYS:
appname_record_user_id_3214bab8a46891cc_idx, appname_record_07cc694b …Run Code Online (Sandbox Code Playgroud)