mysql - 简单的选择查询优化

标签 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 字段中添加了一个索引。谁能解释我错过了什么?

最佳答案

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

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

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

关于mysql - 简单的选择查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34676911/

相关文章:

mysql - 内连接、更新、选择重复条目

php - MySQL 和 PHP - 插入 NULL 而不是空字符串

php - 添加到同一记录的多个值 - MySQL PHP

mysql - 如何查询计数中的计数(不使用子查询)?

java - 使用JOOQ创建测试用数据库

python - 如何自定义表单的属性。在 Django 中选择选项

mysql - Group BY 和 ORDER BY 优化

c# - FirebirdSql (C#) 比在 FlameRobin 中执行脚本慢

java - JPA JPQL : SELECT NEW with COUNT, GROUP BY 和 ORDER BY

php - LEFT 加入在一页中工作,但不在另一页中工作