Я использую MySQL 5.1.73 (FreePBX), и наша таблица cdr (журнал вызовов) перестала использовать свои индексы. Странно то, что если я дублировать таблицу и заполнить ее с существующими данными CDr, индексы являются используются в копии:Индекс MySQL вообще не используется
mysql> explain select * from cdr where calldate='2013-01-24 15:27:19'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: cdr
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1391088
Extra: Using where
1 row in set (0.00 sec)
mysql> CREATE TABLE `cdr_copy` (
-> `calldate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
-> `clid` varchar(80) NOT NULL DEFAULT '',
-> `src` varchar(80) NOT NULL DEFAULT '',
-> `dst` varchar(80) NOT NULL DEFAULT '',
-> `dcontext` varchar(80) NOT NULL DEFAULT '',
-> `channel` varchar(80) NOT NULL DEFAULT '',
-> `dstchannel` varchar(80) NOT NULL DEFAULT '',
-> `lastapp` varchar(80) NOT NULL DEFAULT '',
-> `lastdata` varchar(80) NOT NULL DEFAULT '',
-> `duration` int(11) NOT NULL DEFAULT '0',
-> `billsec` int(11) NOT NULL DEFAULT '0',
-> `disposition` varchar(45) NOT NULL DEFAULT '',
-> `amaflags` int(11) NOT NULL DEFAULT '0',
-> `accountcode` varchar(20) NOT NULL DEFAULT '',
-> `uniqueid` varchar(32) NOT NULL DEFAULT '',
-> `userfield` varchar(255) NOT NULL DEFAULT '',
-> `did` varchar(50) NOT NULL DEFAULT '',
-> `recordingfile` varchar(255) NOT NULL DEFAULT '',
-> `cnum` varchar(40) NOT NULL DEFAULT '',
-> `cnam` varchar(40) NOT NULL DEFAULT '',
-> `outbound_cnum` varchar(40) NOT NULL DEFAULT '',
-> `outbound_cnam` varchar(40) NOT NULL DEFAULT '',
-> `dst_cnam` varchar(40) NOT NULL DEFAULT '',
-> KEY `calldate` (`calldate`),
-> KEY `dst` (`dst`),
-> KEY `accountcode` (`accountcode`),
-> KEY `uniqueid` (`uniqueid`)
->) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.02 sec)
mysql> insert into cdr_copy select * from cdr;
Query OK, 1391093 rows affected (33.59 sec)
Records: 1391093 Duplicates: 0 Warnings: 0
mysql> explain select * from cdr_copy where calldate='2013-01-24 15:27:19'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: cdr_copy
type: ref
possible_keys: calldate
key: calldate
key_len: 8
ref: const
rows: 1
Extra:
1 row in set (0.00 sec)
Я проверил CDr стол, и, кажется, сказать, что все в порядке. Очевидно, что метод easy был бы просто сбросом таблицы и воссоздать ее в течение некоторого времени простоя. Однако это похоже на битву, потому что мне не нравится не знать, какова фактическая проблема.
Вы уверены, что индекс не упал ('ОПИСАТЬ cdr_copy')? – Mark
Как долго длится конкретный запрос, который вы указали, чтобы выполнить (не объяснять, а запускать)? Если запрос быстрый, может быть, есть разница между тем, что объясняет говорит и что делает сервер. Вы пробовали «REPAIR TABLE?», Который испустит диагностику. –
@MrMarchello - запрос на cdr_copy использует индекс, а не наоборот. – oobayly