不要再用dataformat统计每天的日期的count了,可以使用substring和cast函数速度更快更方便

129 阅读2分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

不要再用dataformat统计每天的日期的count了 最近在优化报表统计图的查询速度 要查询每天某一项的count数量,由于需要group by 走索引 但是dataformat属于mysql函数不能走索引 所有我看了MySQL的其他速度比dataformat快的函数 第一个是

substring()使用方法总结:

1. substring(string, position, length)

第一个参数string指的是需要截取的原字符串。

第二个参数position指的是从哪个位置开始截取子字符串,(需要注意的是这里字符的位置编码序号是从1开始,比如’pandas’里d的位置是4,而放到Python中为3),若position为负数则从右往左开始数位置。

第三个参数length指的是需要截取的字符串长度,如果不写,则默认截取从position开始到最后一位的所有字符。

例:substring(‘pandas’, length(pandas)-2, 2) 的结果为 ‘da’.

2. substring(string from position for length)

是一种更加规范的写法,参数含义同上所述。

同样,这里的 for length可以不写,默认从position开始截取到最后一个字符。

例:substring(‘pandas’ from 4 for 2) 的结果为 ‘da’.

1.字符串截取:substring,从第一个字段截取到第十个字符串,然后group by

SELECT substring(time, 1, 10),count(distinct customers_ip) as days_count 
FROM  `table` group by 
substring(customers_ip_date, 1, 10)

CAST函数用于将值从一种数据类型转换为表达式中指定的另一种数据类型

语法

CAST(value AS datatype) AS关键字用于分隔两个参数,在AS之前的是要处理的数据,在AS之后的是要转换的数据类型

参数说明

value: 要转换的值

datatype: 要转换成的数据类型

2.使用cast函数,进行group by

SELECT cast(my_time as date) as date,count(*)  FROM  `table` 
group by  cast(my_time as date)

经过实验substring函数和cast函数都比datafomat快数倍

cast函数最快 但是要注意MySQL使用函数都是无法走索引的在这里插入图片描述