Mysql查询优化-50k+;排

Mysql查询优化-50k+;排,mysql,optimization,Mysql,Optimization,我正在用这个查询查询50k+行,需要1.2759秒。您认为优化它的最佳方式是什么。数据大约每秒更新一次,但我可以将其缓存20秒。我一直在研究memcached,但是有没有办法优化这个查询?大多数列上已经有索引 SELECT `p`.`id` as performance_id, `p`.`performers`, `t`.`name` as track_name, `p`.`location`, `p`.`es_id` FROM (`performances` p) JOIN `users` u

我正在用这个查询查询50k+行,需要1.2759秒。您认为优化它的最佳方式是什么。数据大约每秒更新一次,但我可以将其缓存20秒。我一直在研究memcached,但是有没有办法优化这个查询?大多数列上已经有索引

SELECT `p`.`id` as performance_id, `p`.`performers`, `t`.`name` as track_name, `p`.`location`, `p`.`es_id`
FROM (`performances` p)
JOIN `users` u ON `p`.`user_id` = `u`.`id`
JOIN `tracks` t ON `p`.`track` = `t`.`id`
WHERE (p.status = 1 OR (p.status != 2 && p.flagged < 3))
AND `p`.`prop` IN ('1', '2', '3', '4', '5', '6', '8', '11', '13') 
AND `p`.`track` IN ('5', '15', '2', '3', '8', '6', '12', '4', '1') 
AND `p`.`type` IN ('1', '0', '2') 
ORDER BY `p`.`created` desc
LIMIT 12 

对查询运行EXPLAIN PLAN并查找表扫描。如果您找到了索引,请考虑添加索引。

对查询运行解释计划并查找表扫描。如果你找到一个,考虑添加索引。

按照达菲莫说的做,解释并创建索引。这将完成你需要的99%的工作 如果您想让它更快,您也可以这样做:

  • 启用查询缓存

    查询\缓存\大小=268435456

    查询\缓存\类型=1

    查询缓存限制=1048576

  • 您还可以增加表缓存大小


  • 按照达菲莫说的做,解释并创建索引。这将完成你需要的99%的工作 如果您想让它更快,您也可以这样做:

  • 启用查询缓存

    查询\缓存\大小=268435456

    查询\缓存\类型=1

    查询缓存限制=1048576

  • 您还可以增加表缓存大小


  • MySQL在查询的每个阶段只能使用一个索引。您有许多单列索引,但其中只有一个将用于查询。为了更好地利用索引,请尝试添加多列索引。例如,您可以尝试以下4列索引:

    (status, type, prop, track)
    

    索引中包含的列及其顺序都会影响查询速度。在不知道数据分布的情况下,很难判断最佳顺序,所以请随意尝试一下。您可以添加多个索引,运行查询以查看实际使用的索引,然后删除其他未使用的索引。

    MySQL在查询的每个阶段只能使用一个索引。您有许多单列索引,但其中只有一个将用于查询。为了更好地利用索引,请尝试添加多列索引。例如,您可以尝试以下4列索引:

    (status, type, prop, track)
    

    索引中包含的列及其顺序都会影响查询速度。在不知道数据分布的情况下,很难判断最佳顺序,所以请随意尝试一下。您可以添加多个索引,运行查询以查看实际使用的索引,然后删除其他未使用的索引。

    如果它仍然回避您,请随意编辑您的帖子,并包含解释计划的结果如果它仍然回避您,请随意编辑您的帖子并将解释计划的结果包括在
    性能的简单索引中。考虑到较小的限制(12),创建的
    也可能有用(取决于您的数据分布)。创建的
    性能的简单索引也可能有用(取决于您的数据分布),考虑到较小的限制(12)。