[英]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.