如何正确设置Mysql数据库中的表键(索引)

如何正确设置Mysql数据库中的表键(索引),mysql,indexing,Mysql,Indexing,我想知道如何构造和创建MYSQL表中的键,以确保最高效的搜索 假设我有一个包含字段的表: a、b、c、d 我在SELECT语句中使用了WHERE条件下这些字段的所有可能组合 创建一个覆盖所有字段的组合键是否更好 或者我最好为这四个字段中的每一个创建一个键 哪种变体对于搜索查询具有更好的性能 键应仅为索引类型 谢谢你的回答。我的文章介绍了一些基本知识 我在SELECT语句中使用WHERE条件中这些字段的所有可能组合 这是不实际的。取而代之的是,获得一些UI方面的经验,并决定通常查询哪两列。然后有一

我想知道如何构造和创建MYSQL表中的键,以确保最高效的搜索

假设我有一个包含字段的表:

a、b、c、d

我在SELECT语句中使用了WHERE条件下这些字段的所有可能组合

创建一个覆盖所有字段的组合键是否更好

或者我最好为这四个字段中的每一个创建一个键

哪种变体对于搜索查询具有更好的性能

键应仅为索引类型

谢谢你的回答。

我的文章介绍了一些基本知识

我在SELECT语句中使用WHERE条件中这些字段的所有可能组合

这是不实际的。取而代之的是,获得一些UI方面的经验,并决定通常查询哪两列。然后有一个
索引(x,y,…)
,其中x和y是最常见的

如果x和y都使用
=
进行测试,则将哪个放在第一位并不重要。否则,请先放置
=
一个。如果使用
=
测试两个列,则拥有多个列将没有帮助

请提供应用程序的提示。房地产?做媒?还有别的吗

创建一个覆盖所有字段的组合键是否更好

很少。索引中列的顺序很重要

或者我最好为这四个字段中的每一个创建一个键

也许吧。根据可能的组合,您还可以添加更多的列

哪种变体对于搜索查询具有更好的性能

我们需要谈谈具体的例子

键应仅为索引类型

嗯?“键”和“索引”是同义词

更多

由于这些值是“连续的”“科学的”值,您可能应该对数据类型使用
FLOAT
。你可能主要是比较范围(例如,pH<5.0)


使用复合索引时,索引在第一个“范围”之后不再有用。因此,您可能不会比拥有4个1列索引做得更好。(让我们看一些典型的问题示例。)

非常感谢里克·詹姆斯的解释。他们很有帮助。我的表格是关于科学数据的。pH值、盐度等参数需要以各种可能的方式组合参数。这些参数听起来像是最好存储为
FLOAT
的值。但不要使用=或!=;进行测试;由于存在舍入问题,这类测试可能会产生意想不到的结果。(我补充了我的答案。)