首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL为统计表建立索引

MYSQL为统计表建立索引
EN

Stack Overflow用户
提问于 2018-07-23 14:00:12
回答 1查看 40关注 0票数 0

我有一个mysql表,其中存储从一些‘日志文件’解析的信息。该表包含以下列

代码语言:javascript
复制
 Table "logfiles"
 log_id        INT (PRIMARY)
 logfile_name  TEXT
 date          DATE (INDEX)
 username      TEXT (INDEX)
 field1        FLOAT
 field2        FLOAT
 field3        FLOAT

我想做一个统计查询,以按年对事物求和,如下所示:

代码语言:javascript
复制
SELECT 
    YEAR(date) AS year, 
    COUNT(DISTINCT date) AS active_days,
    COUNT(log_id) AS total_logs,
    COUNT(DISTINCT username) AS active_users,
    SUM(field1) AS total_field1,
    SUM(field2) AS total_field2
FROM 
    logfiles
GROUP BY 
    year
ORDER BY
    year ASC 

什么是索引这个表的最好方法,以使查询运行得更快(并使用索引)。

目前,100000行的查询耗时3秒。从EXPLAIN查询中,我可以理解它没有使用索引。

代码语言:javascript
复制
id              1   
select_type     SIMPLE  
table           logfile_list    
type            ALL     
possible_keys   NULL    
key             NULL    
key_len         NULL    
ref             NULL    
rows            88963   
Extra           Using filesort

感谢您的帮助,向Pikot致以最美好的问候

EN

回答 1

Stack Overflow用户

发布于 2018-07-24 03:34:49

  • 这一点,特别是因为COUNT(DISTINCT...)需要读取每一行。
  • 因此将创建一个临时表。
  • 由于TEXT的存在,它必须在磁盘(MyISAM)上,而不是在内存(内存)中。

因此,将username TEXT更改为username VARCHAR(55) (或一些合理的大小)可能会加快查询速度,可能是原来的两倍。

在没有COUNT(DISTINCT...)的情况下,您可以通过使用获得10倍的加速。

它很复杂,但可以相当精确地总结COUNT(DISTINCT...)。请参阅

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

https://stackoverflow.com/questions/51472371

复制
相关文章

相似问题

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