索引是否会在MySQL中相互干扰?

时间:2010-11-14 10:02:04

标签: mysql optimization select indexing

我有一个包含3列的表格。该表包含许多原始数据(数百万)。当我从表中选择行时,我经常使用以下where子句:

where column2=value1 and column3=value2
where column1=value  

为了加快select查询,我想将column1和column2声明为索引。我的问题是如果将第二列声明为索引不会降低将第一列声明为索引的正面影响

我还想问一下,如果将第二列声明为索引会加快此类型的查询:where column2=value1 and column3=value2

ADDED column1column2column3entityattributevalue。这很一般。作为实体我使用人,电影,城市,国家等。属性是这样的:“位于”,“出生日期”,“由...产生”。

2 个答案:

答案 0 :(得分:4)

您应该创建支持查询的索引。在这种情况下,您希望一起创建一个索引column2,column3(而不是两个单独的索引,但列的组合的一个索引)以支持第一个查询,另一个在{{1支持第二个查询。更一般地说,如果查询使用一组列,那么为所有这些列添加索引将加快它的速度(当然,除了很多例外)。

column1上的索引会加快查询column2column2=value1 and column1=value2上的索引也会加快(重要的是column2,column3是第一列索引)。

使用索引时,column2关键字非常有用。使用EXPLAIN(例如EXPLAIN)对您的查询进行前缀,以获取数据库将如何执行查询的说明。它会告诉你它是否会使用索引,在这种情况下是哪个。

答案 1 :(得分:0)

好像你的计划都不会起作用。基于where子句,我建议在column1上使用主键,并在第二个索引column2,column3上使用。这样可以加快您的查询速度。