如何使用MySQL索引

时间:2017-12-04 14:22:02

标签: mysql indexing

我尝试使用此查询在MySQL上创建索引

CREATE TABLE test (id INT, age INT, INDEX(id,age));

DESCRIBE test;给出了这个:

+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  | MUL | NULL    |       |
| age   | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

当我试图找到为什么只是id被索引时,我发现了另外两件事。 CREATE INDEX查询重新获得索引的名称,并且还有一个USE INDEX ()语句。

现在我的问题:

  1. 第一个查询是错误的,还是我将ID和年龄都编入索引,这就是为什么ID才能被编入索引?
  2. 我是否可以在不提供名称的情况下创建索引,就像我在第一个查询中所做的那样(或者在设置PRIMARY KEY列时)?
  3. 我每次想要使用索引时都应该添加USE INDEX吗?如果是,是否存在默认情况下使用索引的情况(例如,在创建没有名称的索引时,如果可能)?

2 个答案:

答案 0 :(得分:0)

您的带有索引的创建表查询 - 没问题,您可以通过运行命令来检查它 SHOW INDEX FROM test你会看到你的索引。

通常,最好使用自己的名称创建索引(即使您可以在查询中省略它)。

USE INDEX - 它是查询性能优化关键字,这只是一个关键mysql可以使用的建议(只有当你清楚地了解你在做什么时才能使用它,你不能将它用于每个人的查询)。

答案 1 :(得分:0)

使用SHOW CREATE TABLE;它比DESCRIBE更具描述性!

您提出的DESCRIBE不同意INDEX(id,age)的存在。

通常,id是表格的PRIMARY KEY。你已经打破了传统;请解释一下你的意图。

不要使用USE INDEXFORCE INDEX - 这可能对“今天”有所帮助,但可能会“明天”受伤。让优化器决定使用哪个( if any )索引。

我们无法在不知道您将使用SELECTs对象的情况下批评架构。

每个表都应该有一个PRIMARY KEY。注意:根据定义(在MySQL中)PK是UNIQUEINDEX

索引的名称几乎没有用处。如果未命名索引,则将生成名称。索引DROPping时需要一个名称。