Php 强制时SQL索引速度较慢

Php 强制时SQL索引速度较慢,php,mysql,sql,windows,Php,Mysql,Sql,Windows,如果我有下表: +------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------+------+-----+---------+-------+ | emp_no | int(11) | NO | PRI | NULL |

如果我有下表:

+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int(11)       | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | NO   | MUL | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int(11)       | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | NO   |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
我确实:

SELECT * FROM employees FORCE INDEX (first_name) WHERE first_name = 'Shem'
对first_name编制索引的表执行此查询比运行以下语句慢:

SELECT * FROM employees WHERE first_name = 'Shem'
下表:

+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int(11)       | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | NO   | MUL | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int(11)       | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | NO   |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
为什么使用索引并强制mySQL使用该索引比在first_name上没有任何索引要慢?这不是应该更快吗

解释

从名为“Shem”(无索引)的员工中选择*

从员工队伍索引(名字)中选择*,其中名字='Shem'(索引)

从名为“Shem”(索引)的员工中选择*

定时结果:


EXPLAIN SELECT…
显示了什么?他们在被强迫时都会拖拖拉拉…@BlueMonster没有人喜欢被强迫。如果你让他们自愿做你想做的事,你就赢了!:)-(别理我,我太喜欢你的问题标题了,我不得不把它翻出来)@codeargy LOL!很好,我实际上笑了出来。在这个例子中,更让我困扰的是,没有索引的结果和有索引的结果一样快。看起来MySQL在这里做了一个完整的表扫描,即使有索引可以使用。
+----+-------------+-----------+------+---------------+------------+---------+-------+------+-----------------------+
| id | select_type | table     | type | possible_keys | key        | key_len | ref   | rows | Extra                 |
+----+-------------+-----------+------+---------------+------------+---------+-------+------+-----------------------+
|  1 | SIMPLE      | employees | ref  | first_name    | first_name | 44      | const |  235 | Using index condition |
+----+-------------+-----------+------+---------------+------------+---------+-------+------+-----------------------+
no index:
2.7541568279266

index - forced:
2.827162027359

index - no force: 
2.721155166626