1

为什么这样的事情不起作用?

mysql> SELECT * FROM employees FORCE INDEX(emp_no) WHERE emp_no = '77899';

表如下所示:

+------------+---------------+------+-----+---------+-------+
| 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    |       |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.01 sec)

我得到的错误是:

ERROR 1176 (42000): Key 'emp_no' doesn't exist in table 'employees'
4

3 回答 3

3

emp_no 是主键的名称并不意味着它是索引的名称。

每个提示都需要索引的名称,而不是列的名称。PRIMARY KEY 的名称是 PRIMARY。要查看表的索引名称,请使用 SHOW INDEX。 http://dev.mysql.com/doc/refman/5.1/en/index-hints.html

改为这样做

mysql> SELECT * FROM employees FORCE INDEX(PRIMARY) WHERE emp_no = '77899';
于 2013-10-06T03:10:37.343 回答
1

我认为它在抱怨(非常无益),因为您正在对已经是索引的东西进行强制索引。SHOW INDEXES FROM <<tablename>>确定。 你不应该需要强制索引子句..

于 2013-11-15T21:09:39.963 回答
1

您可以先通过此查询将其添加到索引列表中。

ALTER TABLE employees ADD INDEX emp_no (emp_no);

于 2022-01-05T09:21:45.400 回答