mysql in 索引_mysql-IN子句不使用索引

这是表的定义

CREATE TABLE `dt_prdtime` (

`TCompany` varchar(3) NOT NULL DEFAULT '',

`TPerCode` varchar(8) NOT NULL,

`TBegDateTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '??????',

`TQPay` int(1) NOT NULL DEFAULT '2',

`TYear` int(4) NOT NULL,

`TMonth` int(2) NOT NULL,

PRIMARY KEY (`TCompany`,`TPerCode`,`TBegDateTime`),

KEY `TMonth` (`TMonth`) USING BTREE,

KEY `TPerCode` (`TPerCode`,`TYear`,`TMonth`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8

这是数据样本.该表有10000条记录,并且TMonth字段中的值有所不同

+----------+----------+---------------------+-------+-------+--------+

| TCompany | TPerCode | TBegDateTime | TQPay | TYear | TMonth |

+----------+----------+---------------------+-------+-------+--------+

| S10 | 000001 | 2016-01-02 17:33:00 | 1 | 2016 | 1 |

| S10 | 000001 | 2016-01-02 07:48:00 | 1 | 2016 | 1 |

| S10 | 000001 | 2016-01-03 17:39:00 | 1 | 2016 | 1 |

| S10 | 000001 | 2016-01-03 07:30:00 | 1 | 2016 | 1 |

| S10 | 000001 | 2016-01-04 17:49:00 | 1 | 2016 | 1 |

| S10 | 000001 | 2016-01-04 07:54:00 | 1 | 2016 | 1 |

| S10 | 000001 | 2016-01-05 17:50:00 | 1 | 2016 | 1 |

| S10 | 000001 | 2016-01-05 07:36:00 | 1 | 2016 | 1 |

| S10 | 000001 | 2016-01-06 17:37:00 | 1 | 2016 | 1 |

| S10 | 000001 | 2016-01-06 07:35:00 | 1 | 2016 | 1 |

+----------+----------+---------------------+-------+-------+--------+

通过EXPLAIN,此查询使用TMonth索引:

SELECT * FROM dt_prdtime WHERE TMonth = 5

而这个拒绝使用索引:

SELECT * FROM dt_prdtime WHERE TMonth IN (5,6)

我用另一个简单的表进行了测试,

CREATE TABLE `table1` (

`id` int(11) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1

SELECT * FROM table2 WHERE id IN (5,6)

并且使用了该表的索引

有人可以解释吗? dt_prdtime表有问题吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值