Mysql:如何在表上创建索引

Mysql:如何在表上创建索引,mysql,indexing,myisam,Mysql,Indexing,Myisam,我想知道什么时候我必须把多个索引放在同一个“索引”下,还是放在不同的索引上 INDEX `field1` (`field1`) INDEX `field2` (`field2`) 或 有什么不同吗 谢谢是的,有区别。看:你什么时候会这样做 SELECT * WHERE a = '1' and b = '2' 您将为a列和b列创建一个索引: INDEX `field1` (`field1`,`field2`) 两个索引将更慢 对不起,我的英语不好。有区别。由两列(或更多列)组成的索引将根据指

我想知道什么时候我必须把多个索引放在同一个“索引”下,还是放在不同的索引上

INDEX `field1` (`field1`)
INDEX `field2` (`field2`)

有什么不同吗


谢谢

是的,有区别。看:你什么时候会这样做

SELECT * WHERE a = '1' and b = '2'
您将为a列和b列创建一个索引:

INDEX `field1` (`field1`,`field2`)
两个索引将更慢


对不起,我的英语不好。

有区别。由两列(或更多列)组成的索引将根据指定列的顺序生成。只有在搜索前X个字段时,才能使用该字段。假设你有一个索引

exampleIndex (`a`, `b`, `c`)
它将在运行以下查询时使用:

SELECT * FROM tbl WHERE a = 1;
SELECT * FROM tbl WHERE a = 1 AND b = 2;
SELECT * FROM tbl WHERE a = 1 AND b = 2 AND c = 3;
SELECT * FROM tbl WHERE b = 2;
SELECT * FROM tbl WHERE c = 3;
SELECT * FROM tbl WHERE b = 2 AND c = 3;
当运行以下查询时,将不使用该选项:

SELECT * FROM tbl WHERE a = 1;
SELECT * FROM tbl WHERE a = 1 AND b = 2;
SELECT * FROM tbl WHERE a = 1 AND b = 2 AND c = 3;
SELECT * FROM tbl WHERE b = 2;
SELECT * FROM tbl WHERE c = 3;
SELECT * FROM tbl WHERE b = 2 AND c = 3;

对于第一种类型的查询,使用3字段索引将比使用单独的索引更快,因此决定如何构建索引取决于您将需要的查询类型

好的,但如果我只需要执行(
SELECT*FROM tbl,其中a=1
),则根本不会使用索引?@yes123将使用它,但这只是因为您在索引中首先指定了
a
<代码>从tbl中选择*,其中b=2将不使用该索引