简单的选择查询优化

时间:2016-01-08 12:14:16

标签: mysql sql select query-optimization

我的表格定义如下:

   CREATE TABLE IF NOT EXISTS `cards` (
`ID` int(11) NOT NULL,
  `Name` varchar(200) NOT NULL,
  `WorkerID` varchar(20) NOT NULL,
  `pic` varchar(200) NOT NULL,
  `expDate` bigint(20) NOT NULL,
  `reminderSent` tinyint(4) NOT NULL,
  `regNum` varchar(8) NOT NULL,
  `cardType` varchar(200) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=92 DEFAULT CHARSET=latin1;


ALTER TABLE `cards`
 ADD PRIMARY KEY (`ID`), ADD KEY `cardsWorkerID_idx` (`WorkerID`);

但是跑步:

explain
SELECT pic, expDate, Name, ID, cardType, regNum FROM cards WHERE workerID= 18

告诉我它正在扫描整个表,即使我在workerID字段中添加了一个索引。任何人都可以解释我错过的东西吗?

1 个答案:

答案 0 :(得分:1)

索引的使用取决于数据的大小。它还取决于用于比较的类型。如果您有一个小表,那么SQL引擎可能会认为扫描比使用索引更有效。如果表适合单个数据页,则尤其如此。

但是,在您的情况下,问题可能是数据转换。使用适当的类型常量进行比较:

SELECT pic, expDate, Name, ID, cardType, regNum
FROM cards
WHERE workerID = '18';