首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

Mysql优化
EN

Stack Overflow用户
提问于 2009-07-08 10:29:23
回答 3查看 280关注 0票数 1

我目前正在尝试优化一条MYSQL语句,这需要相当长的时间。它正在运行的表是600k+,查询耗时超过10秒。

代码语言:javascript
运行
复制
SELECT DATE_FORMAT( timestamp, '%Y-%m-%d' ) AS date, COUNT( DISTINCT (
email
) ) AS count
FROM log
WHERE timestamp > '2009-02-23'
AND timestamp < '2020-01-01'
AND TYPE = 'play'
GROUP BY date
ORDER BY date DESC

我只在时间戳和类型上建立了索引,还在timestamp_type (type_2)上建立了索引。

这是解释结果,问题似乎是文件排序,但我不知道如何解决这个问题……

代码语言:javascript
运行
复制
id: 1
select_type: SIMPLE
table: log
type: ref
possible_keys: type,timestamp,type_2
key: type_2
key_len: 1
ref: const
rows: 226403
Extra: Using where; Using filesort

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-08 10:33:41

可以尝试的内容:

  • 有一个单独的date列(带索引),并使用它代替您的timestamp
  • type

之间添加一个索引(不认为这会影响速度,但更容易读取)

所以理想情况下你会

  1. 创建一个date列,并使用
    1. date type填充它,然后将您的选择...类型=?以及两者之间的日期?还有?
票数 4
EN

Stack Overflow用户

发布于 2009-07-08 11:29:35

首先尝试重写以仅根据类型进行过滤。然后应用您的日期范围和聚合。基本上创建一个向下过滤类型的内联视图。我知道优化器很可能已经在做这件事了,但当我试图提高性能时,我发现非常确定首先发生了什么事情是有帮助的。

票数 0
EN

Stack Overflow用户

发布于 2017-05-28 15:02:41

  1. DATE_FORMAT将不使用索引。

代码语言:javascript
运行
复制
1. You can still use the below query to utilize the index on timestamp column 

SELECT timestamp作为日期,COUNT( DISTINCT (电子邮件))作为count FROM log WHERE timestamp > '2009-02-23 00:00:00‘和TYPE = 'play’GROUP BY date BY date DESC

2.在打印/使用时将日期时间值格式化为日期

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1097271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档