问题描述
我的user
表有〜1300000条记录。如果我用小偏移量查询:
SELECT u.id,ud.first_name,ud.last_name
FROM user u LEFT JOIN user_detail ud ON u.id = ud.user_id
WHERE ud.first_name LIKE 'First Name%' OR ud.last_name LIKE 'First Name%' ORDER BY u.id
LIMIT 20 OFFSET 0
很快。但是,如果我查询的偏移量很大,例如:
SELECT u.id,ud.last_name
FROM user u LEFT JOIN user_detail ud ON u.id = ud.user_id
WHERE ud.first_name LIKE 'First Name%' OR ud.last_name LIKE 'First Name%' ORDER BY u.id
LIMIT 20 OFFSET 1336040
很慢。 我认为问题不在WHERE或ORDER BY,因为我在它们上创建了索引。我认为使用较大的OFFSET时,DB必须从头开始扫描表,直到看到需要的偏移量=>才这么慢?
说明查询:
1 |SIMPLE |ud |range |UNIQ_4B5464AEA76ED395,first_name_idx,last_name_idx |UNIQ_4B5464AEA76ED395 |5 |NULL |711700 |Using index condition; Using where
1 |SIMPLE |u |eq_ref |PRIMARY |PRIMARY |4 |trueprofile_dev.ud.user_id |1 |Using index
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)