我尝试使用此查询在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 ()
语句。
现在我的问题:
USE INDEX
吗?如果是,是否存在默认情况下使用索引的情况(例如,在创建没有名称的索引时,如果可能)?答案 0 :(得分:0)
您的带有索引的创建表查询 - 没问题,您可以通过运行命令来检查它
SHOW INDEX FROM test
你会看到你的索引。
通常,最好使用自己的名称创建索引(即使您可以在查询中省略它)。
和USE INDEX
- 它是查询性能优化关键字,这只是一个关键mysql可以使用的建议(只有当你清楚地了解你在做什么时才能使用它,你不能将它用于每个人的查询)。
答案 1 :(得分:0)
使用SHOW CREATE TABLE
;它比DESCRIBE
更具描述性!
您提出的DESCRIBE
不同意INDEX(id,age)
的存在。
通常,id
是表格的PRIMARY KEY
。你已经打破了传统;请解释一下你的意图。
不要使用USE INDEX
或FORCE INDEX
- 这可能对“今天”有所帮助,但可能会“明天”受伤。让优化器决定使用哪个( if any )索引。
我们无法在不知道您将使用SELECTs
对象的情况下批评架构。
每个表都应该有一个PRIMARY KEY
。注意:根据定义(在MySQL中)PK是UNIQUE
和INDEX
。
索引的名称几乎没有用处。如果未命名索引,则将生成名称。索引DROPping
时需要一个名称。