mySQL:使用用户定义函数查询性能

时间:2014-07-26 09:27:30

标签: mysql user-defined-functions multilingual query-performance

我正在尝试制作一个多语言的mySQL数据库。 我正在考虑使用用户定义的函数来确定要读取的表中的哪一列 - 不同的列将存储不同的翻译 - 但我担心查询性能。

例如,如果我想返回城市列表和国家/地区的名称 - 后者以多种语言返回。以下方法将在什么时候影响性能? - 因为我可能会在2-5,000行的桌子上做同等的事情。

国家/地区表格结构:

  SELECT
    `CountryID`,
    `Name_English`,
    `Name_French`,
    `Name_Spanish`
FROM `Country`
WHERE `CountryID` = fCountryID;

城市表结构:

SELECT 
    `City`.`CityName` 'City' 
    ,getCountry(1, `City`.`CountryID`) 'Country'
FROM `City`;

示例函数调用:

  SELECT 
    `City`.`CityName` 'City' 
    ,getCountry(1, `City`.`CountryID`) 'Country'
FROM `City`;

全功能:

  

分隔符$$      CREATE DEFINER = root @ localhost功能       getCountryfLanguageID INT,fCountryID SMALLINT)       RETURNS varchar(100)CHARSET utf8 COLLATE utf8_unicode_ci   BEGIN

DECLARE returnCountry VARCHAR(100);

IF (fLanguageID = 1) -- English
THEN

    SET returnCountry =  (

        SELECT `Name_English` FROM `Country`
        WHERE `CountryID` = fCountryID

    );

ELSEIF (fLanguageID = 2) -- French
THEN
    SET returnCountry =  (

        SELECT `Name_French` FROM `Country`
        WHERE `CountryID` = fCountryID

    );


ELSEIF (fLanguageID = 3) -- Spanish
THEN
    SET returnCountry =  (

        SELECT `Name_Spanish` FROM `Country`
        WHERE `CountryID` = fCountryID

    );

END IF;

RETURN returnCountry;


SELECT
    `CountryID`,
    `Name_English`,
    `Name_French`,
    `Name_Spanish`
FROM `Country`
WHERE `CountryID` = fCountryID;

SELECT 
    `City`.`CityName` 'City' 
    ,getCountry(1, `City`.`CountryID`) 'Country'
FROM `City`;

END $$

0 个答案:

没有答案