我有一個MySQL數據庫表,具有以下形式:如何優化我的MySQL Select查詢?
CREATE TABLE IF NOT EXISTS data_packet (
id BIGINT NOT NULL AUTO_INCREMENT,
time_received BIGINT NOT NULL,
content TEXT NOT NULL,
recording_id INT NOT NULL,
PRIMARY KEY (id),
INDEX fk_data_packet_recording_idx (recording_id ASC),
CONSTRAINT fk_data_packet_recording
FOREIGN KEY (recording_id)
REFERENCES recording(id)
)
這個表我有數據,如這裏面:
<Dat url="vehicleSpeed">
<Abs name="speed" val="97"/>
<Enm name="unit" val="kmh"/>
<Enm name="state" val="valid"/>
</Dat>
表最多可包含1,000,000行。現在我有如下的查詢,選擇具有特定URL的特殊數據包。每個數據包都有這樣一個url屬性。
SELECT *
FROM data_packet
WHERE recording_id = 1
AND content LIKE '%vehicleSpeed%'
AND time_received BETWEEN 1435843095338 AND 1435843095996
ORDER BY time_received ASC;
我認爲這個星座可以優化。在MySQL工作臺中,該查詢需要47ms,其中表只包含大約35.000行。 Java應用程序應該在稍後執行查詢,並且我注意到,需要更多時間通過JDBC來執行查詢。
您可以推薦哪種優化? 索引?另一列?另一張桌子?
非常感謝。
'time_received'上沒有索引肯定會有幫助 –
您如何製作額外的列,我可以將url分開存儲?指數有什麼影響? – tellob
你可以爲表'id'在列上設置'Unique'約束。由於您已經完成了NOT NULL AUTO INCREMENT,所以您可以應用此約束來提高性能。 – ChiranjeeviIT