mysql索引一个统计表

mwg9r5ms  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(329)

我有一个mysql表,它存储从一些“日志文件”解析的信息。该表包含以下列

Table "logfiles"
 log_id        INT (PRIMARY)
 logfile_name  TEXT
 date          DATE (INDEX)
 username      TEXT (INDEX)
 field1        FLOAT
 field2        FLOAT
 field3        FLOAT

我想做一个统计查询,按年份进行汇总,如下所示:

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查询中,我可以理解它没有使用索引。

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

谢谢你的帮助,向皮科特问好

7dl7o3gd

7dl7o3gd1#

尤其是因为 COUNT(DISTINCT...) 需要阅读每一行。
因此将创建一个临时表。
由于 TEXT ,它必须在磁盘(myisam)上,而不是在内存(memory)中。
因此,改变 username TEXTusername VARCHAR(55) (或一些合理的大小)可能会加快查询速度,可能会提高两倍。
没有 COUNT(DISTINCT...) ,通过使用摘要表,您可以获得10倍的加速比。
这是复杂的,但有可能得到相当精确的总结 COUNT(DISTINCT...) . 看到这里了吗

相关问题