Mysql优化查询日期
我需要优化MySQL查询。我有一张赌桌,赌注少于100.000条记录。我需要显示当月的所有记录。Mysql优化查询日期
SELECT betting.id
FROM betting, members
WHERE members.status = 1
and members.id = betting.user
and betting.date between '2016-09-01' and '2016-09-30'
and betting.status = 1
and betting.type = 1;
当我尝试解释命令:
SIMPLE betting range user,date,type,type_2 type_2 7 NULL 4966 Using where
SIMPLE members eq_ref PRIMARY PRIMARY 4 betting.user 1 Using where
是否有任何机会,以减少对数据库的搜索?问题是显示此结果的页面太频繁地被调用,并且会导致大量的CPU成本。不幸的是,我无法缓存结果,因为它们需要生存。有任何想法吗 ?
这是您的查询的格式写入是容易(至少对我来说)了解:
SELECT b.id
FROM betting b join
members m
ON m.id = b.user
WHERE m.status = 1
b.date between '2016-09-01' and '2016-09-30' and
b.status = 1 and
b.type = 1;
我认为最好的索引策略是:betting(status, type, date, user)
和members(id, status)
。
我同意你的可读性,但是这个查询并没有帮助我。目前仍需要搜索5000行左右。我不确定我的查询是否可以优化更多... –
@VinceCarter。 。 。你添加了索引吗? –
是的,现在情况并没有改变很多:1 SIMPLE b范围用户,日期,类型,type_2 type_2 5 NULL 4759使用索引条件 1 SIMPLE m eq_ref PRIMARY,id PRIMARY 4 b.user 1使用Where Where –
您是否在任何相关列上都有索引 – RiggsFolly
您可以在mysql中使用缓存依赖关系。这意味着你将把结果保存在缓存中,直到表更改。 –
@RiggsFolly是的,我有一个索引(类型,结果,状态) –