缓慢更新查询

时间:2017-07-18 15:00:00

标签: mysql sql database mariadb

当我尝试使用以下查询更新我的种子表(我的torrent网站允许仅共享开源内容)时

    UPDATE `torrents` SET `leech` = '0', `seed` = '1' WHERE `id` = '26784' 

更新仅包含20,000条记录的表大约需要0.5秒。我的其他查询在少于0.0478秒(SELECT查询)

中执行
CREATE TABLE IF NOT EXISTS `torrents` (
`id` int(11) NOT NULL,
`hash_info` varchar(255) NOT NULL,
`category_slug` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`size` bigint(20) NOT NULL,
`age` int(11) NOT NULL,
`description` text NOT NULL,
`trackers` longtext NOT NULL,
`magnet` longtext,
`files` longtext,
`parent_category` int(11) NOT NULL,
`category` int(11) NOT NULL,
`publish_date` int(11) DEFAULT NULL,
`uploader` int(11) NOT NULL,
`seed` int(11) DEFAULT '0',
`leech` int(11) DEFAULT '0',
`file_key` varchar(255) DEFAULT NULL,
`comments_count` int(11) DEFAULT '0'
) ENGINE=InnoDB AUTO_INCREMENT=26816 DEFAULT CHARSET=latin1;

任何解决方案?

2 个答案:

答案 0 :(得分:0)

基于索引列的查找比非索引列上的查找快得多。随着数据量的增加,这种情况可能会更加明显。

在Id列上创建索引,并检查它是否有助于提高查询性能。

答案 1 :(得分:0)

id被声明为整数。所以,首先你的比较应该是一个不是字符串的整数:

UPDATE `torrents`
    SET `leech` = '0', `seed` = '1'
    WHERE `id` = 26784;

其次,你需要一个关于id的索引。您可以通过以下方式创建一个:

create index idx_torrents_id on torrents(id);

或者,将其作为表格中的主键。