1

我有与mysql数据库有关的问题。我是 linux 网络服务器管理员,我面临 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 | 编号 | 一个 | 4264 | 空 | 空 | | BTREE | | +--------------+------------+----------+--------- ----+-------------+------------+-------------+-- -----+--------+------+------------+---------+

4

2 回答 2

1

像这样调整查询性能的常规方法是在 department_id 上创建索引。

但是,这假定 Tenders 实际上是一个表而不是一个视图。您应该确认这一点,因为问题可能在视图中。

此外,根据您的描述,问题可能是从服务器到最终用户的连接。我会尝试在服务器上本地运行查询(或在服务器上严格检查执行时间)以查看查询是否真的需要那么长时间。

于 2012-09-10T14:00:09.173 回答
0

当服务器获得一定数量的命中时

定义“某个数字”。当使用更频繁时,读取数据库会更慢是有道理的。此外,MySQL 有一个查询缓存,当对数据进行更改时,它会完全失效。所以每次有人在这张表中插入、删除或修改一条记录时,接下来的查询都会变慢,因为该表的日期仍然是未缓存的。

但是像这样的查询需要 11 秒非常慢,所以要么负载太高,要么硬件不足或损坏,要么你的数据库缺少索引(我总是忘记一开始提到这一点,因为我假设添加索引是一秒钟任何使用数据库的人的性质)。

于 2012-09-10T09:38:15.267 回答