-3
/*Usage example: This function takes S. O. L. I. D. as input and returns SOLID. And similarly removes single quotes, hyphens and slashes from input*/
CREATE DEFINER=`root`@`localhost` FUNCTION `SanitiseNameForSearch`(Name nvarchar(100)) RETURNS varchar(100) CHARSET utf8
BEGIN
RETURN REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(Name, ' ', ''), '.', ''), '''', ''), '-', ''), '/', '');
END
在一個過程中使用此函數,在搜索輸入和列上應用該函數。工作正常,但絕對不可擴展。優化此MySQL查詢不使用函數
CREATE DEFINER=`root`@`localhost` PROCEDURE `Search`(SearchFilter nvarchar(20))
BEGIN
SET @SearchFilter = `SanitiseNameForSearch`(SearchFilter);
SELECT t.TermId, t.Name
FROM Terminology AS t
WHERE `SanitiseNameForSearch`(Name) Like @SearchFilter
ORDER BY length(Name) asc
LIMIT 5;
END;
它是理想的實現通過功能此功能或添加一個單獨的列/表,該函數後保持列值被施加即持有SanitiseNameForSearch(Name)
預先計算的值,以便它可以被索引?
你想[代碼審查(HTTP:// codereview.stackexchange.com/),而不是Stack Overflow。 – cybermonkey
對於我來判斷這個問題應該發生在哪裏,這太細。我在這裏有關於性能優化的一百萬個問題。我希望你沒有因爲這個原因而投票。 –
哇! 3倒票,但沒有人在意解釋爲什麼! –