我是否有关于如何提高这些查询的效果的想法?
我有这样的查询
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 | |
答案 0 :(得分:0)
最后,我已经能够通过重新启动我的后端应用服务器来减少查询负载 看起来有一个需要很长时间才能运行的查询/流程 现在我的查询花了1.2秒,但我仍然会尝试提高我的应用/查询性能,以便它能够在0.5秒内运行。