MySql文本本地化



我需要本地化我的查询结果。要做到这一点,我有:

  • Show,包含id和其他一些信息;
  • ShowNameidShow, name, lang(每个show有多个showName,其中Show.id = ShowName.idShow)

我的查询是现在,并正常工作:

select Show.*,
(SELECT name FROM ShowName 
    WHERE Show.id=ShowName.idShow 
    ORDER BY FIELD(lang,'$userPreferredLanguage','en','it','es','fr','de','pt','da','he','pl','nl','hu','no','sl', 'fi','sv','tr','cs','hr', 'el','ru','zh','ja','ko') 
    LIMIT 0,1) as name,
from Show 

现在,问题是:有没有一种方法可以稍微加快速度?查询大约需要3秒,其中2秒用于计算内部SELECT。我尝试了INNER JOIN,但我不知道如何省略第二个选择。PS:注意ShowName可能没有所有的本地化,所以我需要使用FIELD函数而不是简单的WHERE lang = '$userPreferredLanguage'

提前感谢!

你有ShowName(idShow)的索引吗?

那会有帮助的。一个更好的索引是:ShowName(IdShow, name, lang),因为子查询中的所有列引用都可以被索引满足。

一旦你有了索引,执行显式连接也可能更快:

select Show.*,
       (SELECT name
        FROM ShowName join
             (select 'en' as lang, 1 as priority union all
              select 'it', 2 union all
              . . .
             ) lp
             on showname.lang = lp.lang
        WHERE Show.id=ShowName.idShow 
        ORDER BY lp.priority 
        LIMIT 0, 1
       ) as name
from Show 

最新更新