用于搜索的 MySQL 多索引与多列索引

The*_*tte 2 mysql indexing

在我正在编写的软件中,可以在给定的表格中搜索信息。搜索表单有 5 个字段,当然所有字段都对应于表中的不同列,但所有字段都是可选的。

我的问题是关于多列索引是否有效以及为其构建查询的正确方法。

如果我有一个跨 5 列的单个索引,并且我构建了一个查询来搜索它们,那么当涉及到这个索引中的字段时,我不搜索,我是否执行以下操作:

field1= 10 AND field2> 0 AND ...

或者我根本不应该包括未使用的列?

我已经搜索了有关多个列索引的信息,但是当您需要跳过给定索引中的一列或者您根本不关心该特定索引中的那一列时,我似乎无法找到该怎么做实例。

bas*_*sh- 5

您必须了解在 MySQL 中(在 InnoDB 的情况下)它只使用索引的最左边的前缀。所以如果索引在Field1+Field2中,只用WHERE中的Field2查询是不能利用整个索引的。

如果Field1 + Field2 + Field3是索引,则仅Field1 & Field3在WHERE 中的查询也会发生相同的情况。

选项1

如果要优化每个搜索,则必须为每个搜索方案创建单独的索引。但是,如果表很大,那么索引也会变得非常大。如果经常进行这些搜索查询,这将是值得的。

选项 2

如果您的搜索具有低选择性(即性别),您可以使用一个漂亮的技巧,方法是将低选择性列放在最左侧,并将Gender IN(M, F)其与其他列一起包含在WHERE子句中以利用整个指数。