如何提高特定案例的表现?

时间:2014-02-11 09:49:27

标签: mysql performance

我是否有关于如何提高这些查询的效果的想法?

我有这样的查询

SELECT some_field, another_field, (CASE  
    WHEN HOUR(TIMEDIFF(now(), created_at)) <= 12   
        THEN (likes_count - (HOUR(TIMEDIFF(now(), created_at)) * 0.25))  
    WHEN HOUR(TIMEDIFF(now(), created_at)) > 12   
        AND HOUR(TIMEDIFF(now(), created_at)) <= 48   
        THEN (likes_count -(HOUR(TIMEDIFF(now(), created_at)) * 0.5)) 
    ELSE (likes_count - (HOUR(TIMEDIFF(now(), created_at)) * 3))  
        END) as total  
FROM some_table  
WHERE likes_count >= '30'  
ORDER BY total DESC, created_at DESC  
LIMIT 10

我的生产服务器花了差不多6秒,问题是这些查询位于我的主页(索引)
而查询如果不使用选择案例只需要0.05秒 我曾尝试使用memcached来提高性能,因此应用程序并不总是查询数据库,但查询数据库时问题仍然存在,6秒......

有人建议如何改进这些查询吗?

这是我的解释查询
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
| 1 | SIMPLE | journals | ref | container,indx_journal_status,indx_journal_like_count | indx_journal_status | 32 | const | 22369 | Using where; Using filesort |

这是我的桌子结构
| Field | Type | Null | Key | Default | Extra |
+-----------------------------+-----------------------+------+-----+-------------------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(20) | NO | MUL | Status | |
| description | bigint(20) | YES | | NULL | |
| created_at | timestamp | YES | MUL | CURRENT_TIMESTAMP | |
| likes_count | int(11) | NO | MUL | 0 | |

1 个答案:

答案 0 :(得分:0)

最后,我已经能够通过重新启动我的后端应用服务器来减少查询负载 看起来有一个需要很长时间才能运行的查询/流程 现在我的查询花了1.2秒,但我仍然会尝试提高我的应用/查询性能,以便它能够在0.5秒内运行。