[前][次][番号順一覧][スレッド一覧]

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]