是否可以暂时将查询中的特定值缓存到具有1000多个结果和不同值的mysql,尽管有些重复?...
我在这里向您展示一个想法:
SELECT
members.name,
members.lastname,
use_cache_if_it_was_consulted(SELECT countries.name FROM countries WHERE countries.id = members.country LIMIT 1) AS 'country'
FROM members
WHERE
members.enable = 1
AND members.gender = "M"
AND members.country IN( 1, 2, 3 , 4 , 5 , 9 , 15 , 2342 , 234 )
许多“会员”来自美国,而不是加拿大,还有许多来自其他国家。
我的想法是MySQL不会超载子查询,因为我有一个超过三百万行的表(“成员”)。
答案 0 :(得分:2)
我的回答不是关于在MySQL中缓存一个值,而是提供其他想法而且它太大而无法发表评论:
如果您使用的是子查询,则可以改用Join。
SELECT
members.name,
members.lastname,
countries.name
FROM
members
LEFT OUTER JOIN countries ON countries.id = members.country
WHERE
members.enable = 1
AND members.gender = 'M'
AND members.country IN( 1, 2, 3 , 4 , 5 , 9 , 15 , 2342 , 234 )
考虑到国家/地区名称通常不会发生变化,您还可以使用PHP数组来存储国家/地区名称作为密钥。防爆。 $countryNames
。
在这种情况下,在SQL中,您将检索国家/地区ID:
SELECT
members.name,
members.lastname,
members.country
使用它时,您可以将其用作$countryNames[id]
。
您仍然可以在数据库中拥有countries表。这是因为加入国家/地区表可能会更合适。如果你走这条路,你需要考虑一个是主人,并在有任何增加/修改时同步另一个。
希望这很有用。