我有这个表plc_data:
SELECT `T1`.`nome`, `T1`.`valore`, `T1`.`data_ora`
FROM `plc_data` `T1`
WHERE data_ora = (select max(T2.data_ora)
from plc_data T2
where T1.nome = `T2`.`nome`)
如您所见,查询大约需要2秒钟才能执行!
虽然下一个查询仅选择上次保存的值非常慢(大约34秒):
-property ResourceGroupName, StorageAccountName, Sku, @{l='Sku Name'; e={$_.Sku.Name}}, @{l='Sku Tier'; e={$_.Sku.Tier}}, Kind, Encryption, AccessTier
实际上,该表有311,814行,每天增加约4,600行。
如何加快选择表格?
答案 0 :(得分:1)
您应该在列nome和data_ora上创建正确的索引 但您也可以尝试(使用或不使用索引)来使用此查询
SELECT `T1`.`nome`, `T1`.`valore`, `T2`.`data_ora`
FROM `plc_data` `T1`
INNER JOIN (
SELECT nome, max(data_ora) data_ora
FROM plc_data
GROUP BY nome
) T2 on T1.name = t2.name
AND t1.data_ora = t2.data_ora
答案 1 :(得分:0)
在data_ora
表格上添加索引。这是最低限度。
一般的经验法则是:对于您使用的where
子句中的每个字段组合,应该有一个索引,除非有一个索引以正确的顺序以子句中的字段开头。 / p>
示例:
WHERE field1 = x AND field2 = y AND field3 = z
=>您应该有field1, field2, field3
的索引。
WHERE field1 = x and field2 = y
=>您不需要新索引。这由上面的索引涵盖。
WHERE field3 = x AND field2 = y AND field1 = z
=>您应该拥有field3, field2, field1
的索引,除非您检测到查询优化器足够智能,可以重新排序where
子句中的字段以使用您的第一个索引,这并非总是可行。
但最重要的是要记住:如果您有where
子句,则必须有索引。