mysql:15605
From: 野副 勝己 <野副 勝己 <nozoe@xxxxxxxxxx>>
Date: Tue, 2 Aug 2011 13:26:57 +0900
Subject: [mysql 15605] Indexをつけるとと、update のwhere 句マッチしない [Ver.4.1.23]
初めてメールします、野副と申します。 数年前に作成されたシステムのおもりを引き継ぎ、パフォーマンスが 出ないと言うことでちょっと調べた所、where 句で使われるカラムにindex が付 い ていないという事でインデックス をつける事により、select の検索は格段に早 く なり安堵していたのですが、update でレコードがマッチしないという状況に出 くわし 困惑しています。 使っているバージョンが古いので、バージョンアップするのが一番の近道 だとは思うのですが、現バージョンで何とか回避する方法は無いかと思い、 メールさせて頂きました。 使っている環境としては、 OS: Redhat ES4.5 MySQL: Ver. 4.1.23 上記環境で、 次の様なテーブルのmac_id_no というカラムにインデックスを付けない場合 正常にレコードの更新は出来るのですが、インデックスを付けた場合に、 レコードの更新が出来ないと言う状況に陥っています。 mysql> show create table m_mac\G *************************** 1. row *************************** Table: m_mac Create Table: CREATE TABLE `m_mac` ( `sys_mac_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `sys_usr_id` int(10) unsigned NOT NULL DEFAULT '0', `sys_asp_id` int(10) unsigned NOT NULL DEFAULT '0', `mac_id_no` varchar(8) NOT NULL DEFAULT '', `mac_name` varchar(60) DEFAULT NULL, `mac_type` varchar(96) DEFAULT NULL, `dvc_type` varchar(16) DEFAULT NULL, `ip_addr` varchar(15) DEFAULT NULL, `last_rcpt_date` datetime DEFAULT NULL, `connect_stat` char(1) NOT NULL DEFAULT '0', `rgst_date` datetime DEFAULT NULL, `updt_date` datetime DEFAULT NULL, `prv_ip_addr` varchar(15) DEFAULT NULL, `mac_addr` varchar(50) DEFAULT NULL, `term_type` int(10) NOT NULL DEFAULT '0', PRIMARY KEY (`sys_mac_id`,`sys_usr_id`), KEY `m_mac_idx2` (`sys_usr_id`), KEY `m_mac_idx3` (`sys_asp_id`) ) ENGINE=InnoDB AUTO_INCREMENT=15000 DEFAULT CHARSET=utf8 mysql> update m_mac set ip_addr='3.3.3.3' where mac_id_no = '00012345'; Query OK, 0 rows affected (0.40 sec) Rows matched: 1 Changed: 0 Warnings: 0 mysql> alter table 'm_mac' add index('mac_id_no'); mysql> show create table m_mac\G *************************** 1. row *************************** Table: m_mac Create Table: CREATE TABLE `m_mac` ( `sys_mac_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `sys_usr_id` int(10) unsigned NOT NULL DEFAULT '0', `sys_asp_id` int(10) unsigned NOT NULL DEFAULT '0', `mac_id_no` varchar(8) NOT NULL DEFAULT '', `mac_name` varchar(60) DEFAULT NULL, `mac_type` varchar(96) DEFAULT NULL, `dvc_type` varchar(16) DEFAULT NULL, `ip_addr` varchar(15) DEFAULT NULL, `last_rcpt_date` datetime DEFAULT NULL, `connect_stat` char(1) NOT NULL DEFAULT '0', `rgst_date` datetime DEFAULT NULL, `updt_date` datetime DEFAULT NULL, `prv_ip_addr` varchar(15) DEFAULT NULL, `mac_addr` varchar(50) DEFAULT NULL, `term_type` int(10) NOT NULL DEFAULT '0', PRIMARY KEY (`sys_mac_id`,`sys_usr_id`), KEY `m_mac_idx2` (`sys_usr_id`), KEY `m_mac_idx3` (`sys_asp_id`), KEY `mac_id_no` (`mac_id_no`) ) ENGINE=InnoDB AUTO_INCREMENT=15000 DEFAULT CHARSET=utf8 mysql> update m_mac set ip_addr='3.3.3.3' where mac_id_no = '00012345'; Query OK, 0 rows affected (0.12 sec) Rows matched: 0 Changed: 0 Warnings: 0 mysqlをVer.5 にすれば正常に動作する事は確認済みなのですが、止めると影響 が 有るシステムの為、出来るだけ停止する時間を短くインデックスが効果的 に働く方法が無いか模索しています。 宜しくお願いします。 -- 野副 勝己 @ CSPフロンティア研究所 nozoe@xxxxxxxxxx
-> 15605 2011-08-02 13:26 [野副 勝己 <nozoe@xx] Indexをつけるとと、update のwhere 句マッチしない [Ver.4.1.23] 15606 2011-08-02 16:30 ┗[HIRATSUKA Sadao <hir] 15607 2011-08-02 17:35 ┗[野副 勝己 <nozoe@xx] 15608 2011-08-02 20:30 ┗[HIRATSUKA Sadao <hir] 15609 2011-08-03 10:46 ┗[野副 勝己 <nozoe@xx]