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将不使用该索引