假设我有一个表(T1)与3列(C1,C2,C3),和我加入这样一个指标:如果是查询的最后一个字段,MySQL是否必要索引表中的一列?
ALTER TABLE `t1` ADD INDEX `IDX_c1_c2` USING BTREE (`c1`, `c2`);
我知道,如果我有这样的查询使用索引和完美的作品:
SELECT * FROM `t1` where c1 = "foo" AND c2 = "bar"
但是,这个怎么查询?:
SELECT * FROM `t1` where c1 = "foo" AND c2 = "bar" AND c3 = "foobar"
MySQL的引擎将使用索引,以提高查询或将忽略指数?我的意思是,整个查询必须与索引匹配才能使用索引,或者可以利用查询前两列的索引。
[更新] - 最后的查询,其实,像这样(日期只是一个例子):
SELECT * FROM `t1` where c1 = "foo" AND c2 = "bar" AND c3 > "2016-11-26 07:37:47"
感谢您的回答,让我编辑帖子。看看更新,最后一个查询使用'>'运算符作为日期。我认为这不是一个好主意索引一个日期,所以我想用前两列来优化搜索,然后根据日期查看结果的大小要小得多。 – Fco
据我所知,索引只有两个。随着更多字段的更新和更多空间的消耗,写入操作将需要更多时间。除此之外,我没有看到问题。如果所有三个在查询中运行,我也没有看到制作第三列索引的问题。但是如果你的系统在现有设计下工作的很好,那么现在就不要改变它。 –
对于点查询,哈希索引只比Bree稍快。但是Hash在MySQL中不可用。 (好的,有一个例外。) –