0

是否可以在查询中临时缓存一个特定的值到 mysql 有超过 1000 个结果和不同的值,尽管有些重复?...

在这里,我向您展示一个想法:

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 不会因子查询而过载,因为我有一个包含超过 300 万行的表(“成员”)。

4

1 回答 1

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 数组来存储以 Country Id 作为键的国家/地区名称。前任。$countryNames.

在这种情况下,您将在 SQL 中检索国家/地区 ID:

SELECT
    members.name,
    members.lastname,
    members.country

使用它时,您会将其用作$countryNames[id].

您仍然可以在数据库中拥有国家/地区表。这是因为有时加入国家表可能更合适。如果您走这条路,则需要将其中一个视为主节点,并在有任何添加/修改时同步另一个。

希望这是有用的。

于 2013-10-08T04:29:29.917 回答