对于我正在研究的项目,我必须扫描一个键以找到最佳匹配。仅这些扫描会给我们的测试系统造成很多负担。有谁知道我可以如何改善这一点?我们已经尝试过临时表和游标。
我们正在使用的代码示例:
SET keyLength = (LENGTH(key)-1);
WHILE keyLength >=1 DO
SELECT COUNT(*) INTO resultCount FROM keytable
WHERE I ScreeningKey = (SELECT SUBSTRING(key)-,1,keyLength));
IF (0 < resultCount) THEN
SELECT ScreeningKey INTO bestMatchScreeningKey FROM keytable
WHERE AND ScreeningKey = (SELECT SUBSTRING(key)-,1,keyLength));
/*go to step4*/
LEAVE Step4;
END IF;
SET keyLength = keyLength-1;
END WHILE;
最佳答案
不用SELECT COUNT(*)
而是使用IF EXISTS
。 IF EXISTS
可以在找到匹配项后立即停止扫描,而COUNT(*)
需要遍历整个表格以进行计数。
因此,您最终会得到类似以下内容的信息:(我使用的MySQL很少,所以我不确定语法,我复制粘贴了对我来说不太合适的语法...)
SET keyLength = (LENGTH(key)-1);
WHILE keyLength >=1 DO
IF EXISTS (SELECT * FROM keytable
WHERE I ScreeningKey = (SELECT SUBSTRING(key)-,1,keyLength))) THEN
SELECT SUBSTRING(key)-,1,keyLength INTO bestMatchScreeningKey;
/*go to step4*/
LEAVE Step4;
END IF;
SET keyLength = keyLength-1;
END WHILE;