我是MySQL的新手,有一些我无法找到任何信息的问题。这是我正在尝试做的事情:
我有一个包含5列的数据库:id,c1,c2,c3,c4 id是PRIMARY KEY 每一行在c1,c2,c3,c4中都是唯一的(如果有人使用的术语也让我知道:))
我需要能够搜索表中的现有行,所以我想在c1上放置一个INDEX,这会将行数从10,000(最多100,000)减少到一对。我的问题是:
在索引的性能优势变得“值得”之前,您估计了多少行?棒球场/轶事答案很好。
我是否需要任何特殊语法来告诉MySQL使用INDEX?现在我正在做一个“SELECT id FROM table WHERE c1 ='blah'和c2 ='blah'AND c3 ='blah'AND c4 ='blah'”我不确定INDEX是否在帮助查询所有
任何其他建议,以更好的方式查询表欢迎,只要记住,我是一个新手! :)
提前致谢!
答案 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'
,因为您没有使用c2
或c3
}。由于您在索引中使用了所有四列,因此应该为所有列使用索引。有意义吗?