mysql - SQL 新手 - 使用索引加快速度
问题描述
我是 SQL 数据库的新手,并创建了一个包含以下列的 mySQL 表:
MJD (FLOAT) - may be duplicate
WAVELNTH (LONG) - one of ~10 values
EXPTIME (FLOAT)
DATAMEAN (FLOAT)
FLUX (FLOAT)
一个典型的条目是这样的:
数据库中的典型条目如下所示:
MJD 55329.017334,
WAVELNTH 131
EXPTIME 2.9
DATAMEAN 8.06
FLUX 2.78
该数据库总共有 157,502,333 个条目。
我的查询几乎是专门的
SELECT (MJD, FLUX) FROM t
WHERE (MJD > value1 and MJD < value2 and WAVELNTH=value3)
现在执行一个查询大约需要一分钟。我对索引非常陌生,因此希望在 a) 如何最好地添加索引和 b) 如何在我的查询中使用该索引方面有所帮助。
解决方案
我建议以下索引:
CREATE INDEX idx ON yourTable (WAVELNTH, MJD, FLUX);
前两列WAVELNTH
andMJD
出现在WHERE
子句中,用于潜在地限制查询中需要考虑的记录数。如果没有更多信息,尚不清楚订单应该是什么。因此,以下索引可能会更好:
CREATE INDEX idx ON yourTable (MJD, WAVELNTH, FLUX);
FLUX
我们在索引末尾包含的原因是为了覆盖该列中的值。由于您的选择请求MJD
和FLUX
很可能任何索引都需要具有这两个列才能让 MySQL 使用索引。
推荐阅读
- python - 模板渲染期间的 Django NoReverseMatch 错误
- java - Maven 如何满足 pom.xml 中的 GroupID:Artifact 依赖项?
- python - 如何在这个 pyqt5 应用程序中动态地将标题添加到表中?
- powershell - 将两个将出现在列中的命令合并到一个 csv 文件中
- c# - 在 C# 中按特定顺序编写 XML 属性和命名空间声明?
- python - 在 Tkinter GUI 类中调用 Ptoaster 函数
- python - 如何定义 tesseract_cmd 以在 AWS Lambda 函数中使用 Tesseract-OCR
- flutter - 单击时包裹在 Transform.translate 中的 TextField 不聚焦
- python - 以相反的顺序打印列表
- asp.net-core - IIS 上的 ASP.NET Core grpc-Web 返回 404