neu*_*tik 5 mysql indexing select
我是 MySQL 的新手,有几个问题我找不到任何信息。这是我想要做的:
我有一个包含 5 列的数据库:id、c1、c2、c3、c4 id 是主键每行在 c1、c2、c3、c4 中都是唯一的(如果你们使用了术语,请告诉我:) )
我需要能够搜索表中的现有行,所以我想在 c1 上放置一个 INDEX,这会将行数从 10,000(最多 100,000)减少到一对。我的问题是:
在索引的性能优势变得“值得”之前,您估计有多少行?棒球场/轶事答案很好。
我需要任何特殊的语法来告诉 MySQL 使用 INDEX 吗?现在我正在做一个“SELECT id FROM table WHERE c1='blah' AND c2='blah' AND c3='blah' AND c4='blah'”,我不确定 INDEX 是否有助于查询全部。
欢迎提出任何其他更好的查询表格方法的建议,请记住,我是新手!!:)
提前致谢!
我想索引“值得”取决于您需要查询运行的速度。由于只有数百条记录,无论哪种方式都会“相当”快。但无论如何,索引应该更快,因为您不必读取磁盘上的所有(在某些情况下任何)记录。即使没有索引需要 0.02 秒的查询也可能在有索引的情况下在 0.0004 秒内执行。一旦您进入数千行,您肯定会需要一个索引。因此,您也可以始终对 JOIN 或 WHERE 子句中使用的任何列使用索引,无论有多少行。
MySQL应该使用你的索引。您可以通过运行EXPLAIN查询来检查。EXPLAIN(只需在查询前面添加,例如EXPLAIN SELECT * FROM...。)它将显示正在使用的索引(如果有)。请记住,您必须按照复合索引中指定的顺序使用列。因此,如果您的索引是c1-c2-c3-c4,则不能只使用它c4而不使用其他列。
因此,SELECT * FROM table WHERE c1 = 'foo' AND c4 = 'bar'会使用您的索引 for c1 = 'foo',但它无法使用它c4 = 'bar',因为您没有使用c2or c3。由于您使用了索引中的所有四列,因此索引应该用于所有这些列。合理?