我有挑选出从大型数据库中的特定行/列的查询。假设返回的值是'53'。MYSQL SELECT优化(简单)
我需要得到:
1. The row that is 3000 rows above this value.
2. The row that is 3000 rows below this value.
如果练得值以上仅2000行,然后我需要添加的差别到第二查询。
Ex。
1. Find 3000th value up (turns out that only 2000 values are present)
2. Find 4000th value down.
这里是我是如何做到的(这是一个存储过程):
SET @s1 = CONCAT('INSERT INTO List1(STD) SELECT t1.STD FROM ',t1,' AS t1 USE INDEX(STD) WHERE t1.STD < ',inp1,' order by STD DESC limit ', inp2);
PREPARE stmt FROM @s1;
EXECUTE stmt;
SET @lim = inp2+(inp2-(SELECT FOUND_ROWS()));
SET @s2 = CONCAT('INSERT INTO List1(STD) SELECT t1.STD FROM ',t1,' AS t1 USE INDEX(STD) WHERE t1.STD >=', inp1,' order by STD ASC limit ?');
PREPARE stmt FROM @s2;
EXECUTE stmt USING @lim;
SET @minSD1 = (SELECT MIN(STD) FROM List1);
SET @maxSD1 = (SELECT MAX(STD) FROM List1);
这看起来太过迂回的...有没有更好的办法?
而且,是真的没有办法在存储过程中使用一个变量表名,而无需创建另一个存储过程(与PREPARE
关键字)?
有很多方面的在这里失去了,如被提及,但没有定义的所有变量的意义。除非您提供更多信息,否则您的问题意义不大。 – 2011-06-07 22:04:46
好吧 - 让我代替摆脱不必要的部分... – 2011-06-07 22:13:37
@Jim这是否现在更有意义? – 2011-06-07 22:16:43