[英]Why is my UPDATE query slow in 22 million rows
我正在开发自己的广告系统,显示的每个横幅都会在数据库中插入一条记录(用于统计)。 其中一个值是广告是否正在显示。 然后当您离开页面时,它会更新该行并将值设置为 0。在 400 万左右的旧表上大约是 0.1 秒。
由于某种原因,查询计时器高于 1 秒
数据库结构:
CREATE TABLE `ad_views` (
`id` int(11) NOT NULL,
`datetime` datetime NOT NULL,
`visitor_id` varchar(30) NOT NULL,
`campagne_id` int(5) NOT NULL,
`banner_id` int(5) NOT NULL,
`position_id` int(5) NOT NULL,
`device` varchar(1) NOT NULL,
`seen` tinyint(1) NOT NULL,
`on_page` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `ad_views`
ADD PRIMARY KEY (`id`),
ADD KEY `visitor_id` (`visitor_id`);
SQL 需要这么长时间:
UPDATE `ad_views` SET on_page = 0 WHERE visitor_id = 102577047
我在visitor_id 上添加了一个索引
版本信息
MySQL version 5.5.31
PHP version 7.2
phpMyAdmin 4.9.1
可能 MySQL 服务器版本可能是一个问题,因为它已过时(我无法升级 atm),但可能不会大幅改善查询时间?
visitor_id
的索引所以:
create index idx_ad_views_visitor_id on ad_views(visitor_id);
您可以在索引中有其他列,但visitor_id
必须是第一个。
然后:
UPDATE `ad_views`
SET on_page = 0
WHERE visitor_id = '102577047';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.