1

我需要本地化我的查询结果。为此,我有:

  • 表格Showid以及其他一些信息;
  • ShowName带有idShow,name的表格lang(对于每个节目有多个showNames 其中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'.

提前谢谢!

4

1 回答 1

0

你有索引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 
于 2013-04-24T01:07:00.290 回答