mysql命令限制太慢,选择子查询时更快

时间:2013-03-19 12:41:58

标签: mysql sql-order-by subquery limit

SELECT up.`id`,
       up.`email`,
       up.`username`,
       up.`name`,
       up.`gender`,
       DATE_FORMAT(up.`createdOn`, '%d-%m-%Y') AS `createdDate`,
       up.`accountStatus`,
       ucd.`landphone`
FROM `profiles` up
JOIN `contact_details` ucd ON (up.`id` = ucd.`userId`)
WHERE up.`accountStatus` = 'active'
ORDER BY `name` DESC LIMIT 1000000, 20

需要大约15秒。

SELECT *
FROM (
SELECT up.`id`,
       up.`email`,
       up.`username`,
       up.`name`,
       up.`gender`,
       DATE_FORMAT(up.`createdOn`, '%d-%m-%Y') AS `createdDate`,
       up.accountStatus`, ucd.`landphone`
    FROM `profiles` up JOIN `contact_details` ucd ON (up.`id` = ucd.`userId`)  
    WHERE up.`accountStatus` = 'active' )a  
    ORDER BY `name` DESC LIMIT 1000000, 20

总共350000条记录大约需要2.5秒。

名称字段已编入索引,而accountStatus是枚举字段。为什么在将select变为子查询时速度会提高,还有其他方法可以通过限制查询来优化上述顺序吗?

0 个答案:

没有答案
相关问题