繁体   English   中英

为什么我的 UPDATE 查询在 2200 万行中很慢

[英]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),但可能不会大幅改善查询时间?

编辑: 解释选择

  1. 您需要一个关于visitor_id的索引
  2. 您需要使用正确的类型,以便使用索引

所以:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM