簡體   English   中英

MySQL查詢花費太多時間

[英]Mysql query taking too much time

我有與mysql數據庫有關的問題。 我是linux webserver管理員,並且遇到mysql查詢問題。 數據庫很小。 我試圖跟蹤日志,發現查詢至少需要5秒鍾才能響應。 網站的第一頁來自數據庫。 客戶端正在使用cms。 當服務器獲得一定數量的命中時,數據庫服務器開始非常緩慢地做出響應,等待時間從5秒增加到幾秒鍾。

我檢查了慢查詢日志

{
Query_time: 11.480138  Lock_time: 0.003837 Rows_sent: 921  Rows_examined: 3333

SET timestamp=1346656767;
SELECT `Tender`.`id`,
    `Tender`.`department_id`,
    `Tender`.`title_english`,
    `Tender`.`content_english`,
    `Tender`.`title_hindi`,
    `Tender`.`content_hindi`,
    `Tender`.`file_name`,
    `Tender`.`start_publish`,
    `Tender`.`end_publish`,
    `Tender`.`publish`,
    `Tender`.`status`,
    `Tender`.`createdBy`,
    `Tender`.`created`,
    `Tender`.`modifyBy`,
    `Tender`.`modified`
FROM `mcms_tenders` AS `Tender`
WHERE `Tender`.`department_id` IN ( 31, 33, 32, 30 );
}

日志中的每一行都是相同的,只是查詢時間有所不同。 有什么辦法可以調整性能嗎?

更新:這是EXPLAIN結果:

+----+-------------+--------+------+---------------+------+---------+------+-‌-----+-------------+
| id | select_type | table  | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+--------+------+---------------+------+---------+------+----‌​--+-------------+
| 1  | SIMPLE      | Tender | ALL  | NULL          | NULL | NULL    | NULL | 3542 | Using where |
+----+-------------+--------+------+---------------+------+---------+------+----‌​--+-------------+
1 row in set, 1 warning (0.00 sec) 

客戶端說他們正在使用索引,所以我運行命令來檢查索引。

我得到以下輸出。 是否表示他們正在使用索引。

+ -------------- + ------------ + ---------- + ---------- ---- + ------------- + ----------- + ------------ + ------ ---- + -------- + ------ + ------------ + --------- + | 桌子 非獨特| 鍵名| Seq_in_index | 列名| 整理| 基數| 子部分| 包裝好的 空| 索引類型| 評論| + -------------- + ------------ + ---------- + ---------- ---- + ------------- + ----------- + ------------- + ----- ----- + -------- + ------ + ------------ + --------- + | mcms_tenders | 0 | 主要| 1 | id | A | 4264 | NULL | NULL | | BTREE | | + -------------- + ------------ + ---------- + ---------- ---- + ------------- + ----------- + ------------- + ----- ----- + -------- + ------ + ------------ + --------- +

調整查詢性能的通常方法是在department_id上創建索引。

但是,這假定Tenders實際上是一個表而不是一個視圖。 您應該確認這一點,因為問題可能存在。

同樣,從您所描述的問題來看,可能是服務器到最終用戶的連接。 我會嘗試在服務器上本地運行查詢(或嚴格在服務器上檢查執行時間),以查看查詢是否真的花了那么長時間。

當服務器獲得一定數量的點擊量時

定義“一些數字”。 有道理的是,當數據庫使用率較高時,讀取數據庫的速度會變慢。 另外,MySQL的查詢緩存在對數據進行更改時會完全失效。 因此,每當有人在該表中插入,刪除或修改記錄時,由於表日期仍未緩存,因此下一次查詢將變慢。

但是這樣的查詢需要11秒的時間,因此非常慢,因此要么負載太高,硬件不足或損壞,要么數據庫缺少索引(我一開始總是忘記提及這一點,因為我假設第二次添加索引對於任何使用數據庫的人來說都是如此)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM