【发布时间】:2018-03-09 16:28:25
【问题描述】:
查询的结构如下:
SELECT DISTINCT field from table where (param1 IS NULL OR param1=CURDATE()) and (param2 IS NULL or param2=CURDATE())
param1 或 param2 上没有索引。我们有很多数据,我想让一个 cron 作业运行一个脚本,每天运行这个查询。
建议?我应该以某种方式将其拆分为多个较小的查询吗?
编辑:我预计会有大约 1000 万个结果。
【问题讨论】:
-
“无索引”-“大量数据”-这是你的问题。在 where 子句中包含日期可能会使索引无效,即使您添加一个。
-
@duffymo 我不明白你提到的失效。
-
"WHERE param1 = curdate()" 意味着您必须扫描每一行,而不考虑索引。你应该找一个真正了解关系数据库、SQL 和 MySQL 的人来帮助你。首先对查询运行 EXPLAIN PLAN。如果你看到 TABLE SCAN 回来了,你应该重新设计它。
-
...但是 curdate() 不是应用于列的函数..是匹配值,所以..索引。如果存在则使用 .. 并且为此,选择中的 curdate 的值由 sql 引擎在查询代码 analisys 的开头进行评估..
-
无论如何,如果 OP 节目使用 actula 数据模式,wn 可以评估索引是否存在???
标签: mysql database-performance query-performance