Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL索引根本没有被使用_Mysql_Indexing - Fatal编程技术网

MySQL索引根本没有被使用

MySQL索引根本没有被使用,mysql,indexing,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 sele

我正在使用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表,它似乎说一切正常。显然,简单的方法就是转储表,并在停机期间重新创建它。然而,这似乎有点不确定,因为我不喜欢不知道实际问题是什么。

您确定索引没有被删除(
描述cdr\u copy
)?您提到的特定查询运行(不是解释,而是运行)需要多长时间?如果查询速度很快,那么explain所说的和服务器所做的可能会有所不同。您是否尝试过发出诊断信息的
修复表?
。@MrMarchello-对cdr\u copy的查询使用的是索引,而不是相反的方式。@OllieJones-使用索引的查询需要0.00s(小于CLI客户端的精度),而没有索引时,使用BEVER子句需要1.83s,索引为0.02s vs 2.11s我尝试了快速修复,但没有任何区别。当服务器不在使用时,我必须尝试进行全面修复。因此,扩展修复没有任何影响,也没有任何抱怨,所以我只是删除并重新创建了索引。我的查询现在正在使用索引。还是想知道为什么。