MySQL在索引列上选择

时间:2011-07-30 02:52:06

标签: mysql select indexing

我是MySQL的新手,有一些我无法找到任何信息的问题。这是我正在尝试做的事情:

我有一个包含5列的数据库:id,c1,c2,c3,c4 id是PRIMARY KEY 每一行在c1,c2,c3,c4中都是唯一的(如果有人使用的术语也让我知道:))

我需要能够搜索表中的现有行,所以我想在c1上放置一个INDEX,这会将行数从10,000(最多100,000)减少到一对。我的问题是:

  1. 在索引的性能优势变得“值得”之前,您估计了多少行?棒球场/轶事答案很好。

  2. 我是否需要任何特殊语法来告诉MySQL使用INDEX?现在我正在做一个“SELECT id FROM table WHERE c1 ='blah'和c2 ='blah'AND c3 ='blah'AND c4 ='blah'”我不确定INDEX是否在帮助查询所有

  3. 任何其他建议,以更好的方式查询表欢迎,只要记住,我是一个新手! :)

  4. 提前致谢!

1 个答案:

答案 0 :(得分:1)

我认为索引“值得”取决于您运行查询的速度。只有数百条记录,无论哪种方式都很“快”。但无论如何,索引应该更快,因为您不必阅读磁盘上的所有记录(在某些情况下任何)。即使是没有索引的0.02s的查询也可以在0.0004s中执行。一旦你进入成千上万的行,你肯定会想要一个索引。因此,无论行数多少,您都可以使用JOIN或WHERE子句中使用的任何列的索引。

MySQL 使用您的索引。您可以通过运行EXPLAIN查询来进行检查。 (只需在查询前添加EXPLAIN,例如EXPLAIN SELECT * FROM...。)它将显示正在使用的索引(如果有)。请注意,您必须按照composite index中指定的顺序使用列。因此,如果您的索引为c1-c2-c3-c4,则不能仅使用c4而不使用其他列。

因此,SELECT * FROM table WHERE c1 = 'foo' AND c4 = 'bar'会将您的索引用于c1 = 'foo',但无法将其用于c4 = 'bar',因为您没有使用c2c3 }。由于您在索引中使用了所有四列,因此应该为所有列使用索引。有意义吗?