MySQL索引根本就没用过

时间:2015-01-26 12:29:44

标签: mysql indexing

我正在使用MySQL 5.1.73(FreePBX),我们的cdr(调用日志)表已停止使用其索引。奇怪的是,如果我复制表并使用现有的cdr数据填充它,则副本中使用的索引

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 方法只是转储表,并在一些停机时间重新创建它。然而,这似乎有点躲闪,因为我不喜欢不知道实际问题是什么。

0 个答案:

没有答案