大家好,我有一个需要优化的查询。它能运行,但在性能方面表现不佳。
查询语句如下:
SELECT *
FROM (
SELECT *
FROM views
WHERE user_id = '1'
ORDER BY
page DESC
) v
GROUP BY
v.session
我正在追踪不同页面的浏览量,并想知道每个会话中最高的页面,以便了解他们在任何给定会话中点击了多远(他们需要查看每个页面直到最后)。
基本上我想做的是在分组前对结果进行排序。以上方法能够实现,但代价很大。
有谁能告诉我如何做到这一点吗?谢谢!
更新:
说明:
"1" "PRIMARY" "<derived2>" "ALL" \N \N \N \N "3545" "Using temporary; Using filesort"
"2" "DERIVED" "views" "index" \N "page" "5" \N "196168" "Using where"
模式:
ID int(8) unsigned (NULL) NO PRI (NULL) auto_increment select,insert,update,references
page int(8) (NULL) YES MUL (NULL) select,insert,update,references
user_id int(8) (NULL) YES (NULL) select,insert,update,references
session int(8) (NULL) YES (NULL) select,insert,update,references
created datetime (NULL) NO select,insert,update,references
索引信息:
views 0 PRIMARY 1 ID A 196008 (NULL) (NULL) BTREE
views 1 page 1 page A 259 (NULL) (NULL) YES BTREE