mysql - 如何以正确的方式在 Mysql DB 中设置表键(索引)
问题描述
我想知道应该如何构造和创建 MYSQL 表中的键以确保最有效的搜索。
假设我有一个包含字段的表:
A B C D
我在我的 SELECT 语句中使用了 WHERE 条件中这些字段的所有可能组合。
创建一个涵盖所有字段的组合键会更好吗?
或者我应该更好地为四个字段中的每一个创建一个键?
哪个变体对搜索查询有更好的性能?
键只能是 INDEX 类型。
感谢您的回答。
解决方案
我的食谱涵盖了一些基础知识。
我在我的 SELECT 语句中使用 WHERE 条件中这些字段的所有可能组合。
那是不切实际的。相反,获得一些 UI 经验并决定通常查询哪 2 列。然后有一个INDEX(x, y, ...)
x 和 y 是最常见的地方。
如果 x 和 y 都用 进行测试=
,那么先放哪一个并不重要。否则,先放=
一个。如果两者都没有使用 进行测试=
,那么拥有多于一列将无济于事。
请提供您的应用程序的提示。房地产?婚介?还有什么?
创建一个涵盖所有字段的组合键会更好吗?
很少。索引中列的顺序很重要。
或者我应该更好地为四个字段中的每一个创建一个键?
也许。您也可以根据可能的组合添加更多列。
哪个变体对搜索查询有更好的性能?
我们需要谈论具体的例子。
键只能是 INDEX 类型。
嗯?“键”和“索引”是同义词。
更多的
由于这些值是“连续的”“科学”值,因此您可能应该将FLOAT
其用于数据类型。您可能会主要与范围进行比较(例如,pH < 5.0)。
使用复合索引时,索引在第一个“范围”之后不再有用。因此,您可能没有比拥有 4 个 1 列索引更好的方法了。(让我们看一些典型的查询示例。)
推荐阅读
- android - 没有收到有关 PagedList 更新的通知
- java - 在 volatile 变量的上下文中,“后续读取”是什么意思?
- python - 如何导出用 xlsxwriter 编写的 xlsx 文件
- python - 实现 ABC 子类的正确方法
- django - HttpResponseRedirect 后会话数据丢失
- r - 使用 gmapsdistance 来自 Google 距离矩阵 API 的随机错误
- c# - 当从另一个窗体触发按钮单击事件时,在窗体的面板中绘制一个矩形
- javascript - 在数组(单词)中查找所有出现(字母)
- java - Java -Spring Boot - OAuth 2.0 配置实现谷歌账号登录
- vue.js - Prop not Reactive 使用 VUE 发送配置