问题:将单个列的多行中的值分配到单独变量的最快方法是什么?
使用MySQL 5.6
,我有一个以常规时间间隔存储数据的表。在插入触发器中,我试图检测何时,以及其他类似的事情,"峰值"在已经出现的值中,将两个连续的增加值定义为最高值,然后是两个连续递减的值。
因为要对相同的数据执行几个类似的计算,我首先将最后五行的列中的值检索到变量中。我有行的ID号。
执行此操作的一种方法是针对每个ID进行单独的SELECT
查询。但是,我想将它们合并为单个查询速度,因为数据将一次以40k行的形式输入到数据库中。
个人选择:
SET currentValue = (SELECT `value` FROM `table` WHERE `tableid`=currentID);
SET prev1Value = (SELECT `value` FROM `table` WHERE `tableid`=prev1ID);
SET prev2Value = (SELECT `value` FROM `table` WHERE `tableid`=prev2ID);
SET prev3Value = (SELECT `value` FROM `table` WHERE `tableid`=prev3ID);
SET prev4Value = (SELECT `value` FROM `table` WHERE `tableid`=prev4ID);
我知道另一种方法是在同一个表上使用连接。然而,这似乎是一种缓慢的方式。如果不使用JOIN,有更快的方法吗?感谢。
多个JOIN:
SELECT a0.`value`, a1.`value`, a2.`value`, a3.`value`, a4.`value`
INTO currentValue, prev1Value, prev2Value, prev3Value, prev4Value
FROM (SELECT `value` FROM `table` WHERE `tableid`=currentID) AS a0
INNER JOIN (SELECT `value` FROM `table` WHERE `tableid`=prev1ID) AS a1
INNER JOIN (SELECT `value` FROM `table` WHERE `tableid`=prev2ID) AS a2
INNER JOIN (SELECT `value` FROM `table` WHERE `tableid`=prev3ID) AS a3
INNER JOIN (SELECT `value` FROM `table` WHERE `tableid`=prev4ID) AS a4
我想到的另一件事是:
SELECT IF(`tableid`=currentID, `value`, NULL)
, IF(`tableid`=prev1ID, `value`, NULL)
, IF(`tableid`=prev2ID, `value`, NULL)
, IF(`tableid`=prev3ID, `value`, NULL)
, IF(`tableid`=prev4ID, `value`, NULL)
INTO currentValue, prev1Value, prev2Value, prev3Value, prev4Value
FROM `table`
WHERE `tableid` IN (currentID, prev1ID, prev2ID, prev3ID, prev4ID);
但我还没有测试过它。
现在我将使用JOINs
,直到一切就绪,我可以测试IF语句模型。但是,如果有人知道它不会起作用或者有其他方法可以更好地工作,我将不胜感激。还有,将这个放入VIEW帮助查询的速度?
感谢。