0

我正在为我的应用程序使用 mysql db。我有一个包含 4000 万行数据的表。我想在这个表中运行一个更新查询。表包含三个字段。Id、TaxiId、日期和距离。我想将距离更新为零特别Taxiid's.I 正在使用这样的查询

 update abc set distance=0 where TaxiId in(2026,2031,2033,2035,2037,2039);

使用解释时,我得到以下结果

 id select_type table   type    possible_keys   key key_len ref rows    Extra
 1  SIMPLE  abc range   abc_trip_fk abc_trip_fk 5       1916397 Using where

表声明

   CREATE TABLE  `testdb`.`abc` (
 `id` int(8) NOT NULL AUTO_INCREMENT,
    `TaxiId` int(8) DEFAULT NULL,
 `distance` double DEFAULT NULL,
 `date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
   PRIMARY KEY (id),
  KEY `trip_fk` (`TaxiId`) USING BTREE,
 ) ENGINE=InnoDB AUTO_INCREMENT=125127797 DEFAULT CHARSET=latin1;

当我运行此查询时,整个应用程序都会挂起。

4

1 回答 1

0

Innodb 缓冲池选项是 mysql 性能非常重要的选项。
尝试进行以下设置
innodb_flush_log_at_trx_commit=2
innodb_buffer_pool_size=25GB

在数据库中插入/更新/删除操作时禁用索引。
有关 mysql 性能设置的更多信息,请参见此处

于 2013-10-11T11:29:40.947 回答