gpt4 book ai didi

mysql服务器因为一个查询而烧毁,有可能吗?如何加快速度?

转载 作者:行者123 更新时间:2023-11-29 06:41:28 27 4
gpt4 key购买 nike

<分区>

我注意到,由于 Mysqld 在高峰时段的问题,我在编写 SQL 查询时遇到了问题。它导致我的网站加载速度比平时慢 3-5 倍。所以我尝试了 siege -d5 -c150 http://mydomain.com/ 并查看了 top 并且我的 mysqld 占用了超过 700% 的 CPU!我还注意到 mysql 状态:Copying to tmp table and queries adding to some queue or something like this.

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
25877 mysql 20 0 1076m 227m 8268 S 749.0 2.8 224:02.21 mysqld

这是我的查询

SELECT COUNT(downloaded.id) AS downloaded_count
, downloaded.file_name
,uploaded.*
FROM `downloaded` JOIN uploaded
ON downloaded.file_name = uploaded.file_name
WHERE downloaded.completed = '1'
AND uploaded.active = '1'
AND uploaded.nsfw = '0'
AND downloaded.datetime > DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY downloaded.file_name
ORDER BY downloaded_count DESC LIMIT 30;

显示第 0 - 29 行(总共 30 行,查询耗时 0.1639 秒)//这么多吗?不应该是0.01s吗?

更新:(删除了 ORDER BY)

显示第 0 - 29 行(共 30 行,查询耗时 0.0064 秒)为什么 ORDER BY 会使它慢 20 倍?

解释

+----+-------------+------------+------+---------------+-----------+---------+--------------------------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+------+---------------+-----------+---------+--------------------------+------+----------------------------------------------+
| 1 | SIMPLE | uploaded | ALL | file_name_up | NULL | NULL | NULL | 3139 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | downloaded | ref | file_name | file_name | 767 | piqik.uploaded.file_name | 8 | Using where |
+----+-------------+------------+------+---------------+-----------+---------+--------------------------+------+----------------------------------------------+

表:已上传(总计 720.5 KiB)

CREATE TABLE IF NOT EXISTS `uploaded` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sid` int(1) NOT NULL,
`file_name` varchar(255) NOT NULL,
`file_size` varchar(255) NOT NULL,
`file_ext` varchar(255) NOT NULL,
`file_name_keyword` varchar(255) NOT NULL,
`access_key` varchar(40) NOT NULL,
`upload_datetime` datetime NOT NULL,
`last_download` datetime NOT NULL,
`file_password` varchar(255) NOT NULL DEFAULT '',
`nsfw` int(1) NOT NULL,
`votes` int(11) NOT NULL,
`downloads` int(11) NOT NULL,
`video_thumbnail` int(1) NOT NULL DEFAULT '0',
`video_duration` varchar(255) NOT NULL DEFAULT '',
`video_resolution` varchar(11) NOT NULL,
`video_additional` varchar(255) NOT NULL DEFAULT '',
`active` int(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
FULLTEXT KEY `file_name_keyword` (`file_name_keyword`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3328 ;

表:已下载(总计 5,152.0 KiB)

CREATE TABLE IF NOT EXISTS `downloaded` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`file_name` varchar(255) NOT NULL,
`completed` int(1) NOT NULL,
`client_ip_addr` varchar(40) NOT NULL,
`client_access_key` varchar(40) NOT NULL,
`datetime` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=31475 ;

(不知道为什么我在这里选择了 InnoDB)

请注意,我(仍然)没有使用索引(我读到它非常重要!),因为缺乏知识,我不确定如何正确添加它们。

那么问题来了,如何改进这个查询来防止网络服务器加载网站缓慢?我只有“很少”的记录,无法相信我遇到了如此重大的问题,这里的人们处理数百万条记录和他们的项目工作。网络托管公司如何防止这个问题? (我只托管有超过 150 个并发客户端的网页)

附加信息:

Mysql: 5.5.33

Nginx 1.2.1, php5-fpm

Debian 7.1 喘息

2x L5420 @ 2.50GHz

8GB 内存

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com