[英]how to Increase mysql search speed?
我在 MySQL 中有一个表,它有列id(primary key) ,deviceid(varchar) ,date(varchar),time(varchar),value(varchar) parameter(varchar)我在我的数据库列中分隔时间和日期字段犯了错误然后用我的业务逻辑,那里有很多重复的代码
每天每分钟都会在数据库中插入一条新记录。 我的主要查询是为给定数量的 deviceid 获取两个日期之间的数据,以便每个间隔只选择一个值(此间隔由用户输入决定,例如,如果间隔为 1 小时,我需要间隔 00-01 之间的 1 个值hrs,1 间隔时间的值 hrs 01-02 hrs 等等 1 值从 23-24(00) hours )
我的查询需要将近一分钟才能获取数据并显示 2-3 天的数据。 间隔越短,花费的时间就越多。 我是数据库新手,只知道基本的 CRUD 操作。 我已经通过 php myadmin 默认选项设计了表格。 我阅读了索引的概念以提高搜索性能,但我对应该应用索引的列感到困惑。
也是我的value
columun目前VARCHAR但值列的值都浮点数(一锅炉房的温度/湿度)。 将其类型从 varchar 更改为 int 可以提高我的速度吗?
这里有更多解释
我正在使用我的 php 来显示报告,我的时间是字符串格式,日期也是
例如日期存储为“ 08.31.2020” ,时间存储为“ 23.05 ” (小时,分钟)
假设我想要从 '08.01.2020' 到 '08.20.2020' 的数据,间隔为 1 小时 = 60 分钟这是我的业务逻辑和查询
$time1 ='00.00'
$time2 ='01.00' // here I have increased time by adding 60 minutes to $time1 .
while(fromDate <= toDate)
{
for(each device in array)
{
$query = "Select parameter,value,time,date from currentdata where deviceid='device[$i]' and date='fromDate' and (time > '$time1' and time <= '$time2' ) order by time limit 1 "
}
$time1=$time2; //change interval
$time2 =$time2 +60 minutes //
If(time1>=time2)
{
// increment From date by 1
}
}
设备数量约为 30 -35 。 参数只是一个名称,可以是湿度的温度
任何一般性建议、建议、批评都会有所帮助。
在表中使用适当的数据类型。 数字量不应放在VARCHAR
; 根据需要使用INT
、 DECIMAL
或FLOAT
。 (或它们的变体。)
如果您的传入数据不“干净”,则将其读入VARCHAR
并在将其复制到真实表中的SMALLINT UNSIGNED
等时对其进行“清理”。
此外DATE
必须先有年份。
使用+ INTERVAL 1 HOUR
类的东西进行简单的日期或时间算术。
通常最好不要拆分存储的日期和时间,而是根据需要拆分输出。
在您的另一个问题上,我建议您使用JOIN
而不是循环来执行SELECT
。
在解决所有这些问题之后,提供SHOW CREATE TABLE
、新查询等。然后我将权衡索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.