做学院网站用到的动图,中高端网页设计开发,江门恒阳网站建设,wordpress优惠券模板MySQL函数、慢查询 1、函数1.日期函数2.两个日期的时间差3.查询距离时间的间隔时间4.常用的字符串函数5.常用的数学函数6.常用的聚合函数 2、慢查询1.什么是慢查询#xff1f; 从需求出发#xff0c;在数据的操作过程中经常会有以下的问题#xff1b;求和、最大值、最小值、… MySQL函数、慢查询 1、函数1.日期函数2.两个日期的时间差3.查询距离时间的间隔时间4.常用的字符串函数5.常用的数学函数6.常用的聚合函数 2、慢查询1.什么是慢查询 从需求出发在数据的操作过程中经常会有以下的问题求和、最大值、最小值、四舍五入、日期、平均值等而函数的出现正是为了解决这些问题。 1、函数
函数的分类
数学函数用作常规的数学运算字符串函数对于字符串类型的字段处理日期时间函数对于日期和时间类型的字段进行处理聚合函数常用于GROUP BY从句的SELECT查询中自定义函数根据实际需求自定义函数
1.日期函数
函数名返回值函数名返回值CURDATE()返回当前的日期HOUR(time)返回time的小时值(0~23)CURTIME()返回当前的时间MINUTE(time)返回time的分钟值(0~59)NOW()返回当前的日期和时间SECOND(time)返回time的秒(0~59)DAYOFWEEK(date)返回date所代表的一星期中的第几天(1~7)DATE_FORMAT(date,fmt)依照指定的fmt格式格式化日期date值DAYOFMONTH(date)返回date是一个月的第几天(1~31)WEEK(date)返回日期date为一年中第几周(0~53)DAYOFYEAR(date)返回date是一年的第几天(1~366)DAY(date)返回date的日MONTH(date)返回date的月份值(1~12)YEAR(date)返回日期date的年份(1000~9999)
eg:
# 函数
-- 日期函数
select curdate()
select curtime()
select now()
select month(now())
select day(now())
select year(now())
select date_format(now(),%a-%b-%c)2.两个日期的时间差
DATEDIFF(expr1,expr2)只能算天的差select datediff(now(), 2020-9-1 15:30:30);select datediff(2020-9-1 15:30:30,now());
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)年月日时分秒的差
-- year
--month
-- DAYselect TIMESTAMPDIFF(DAY,now(),2020-9-1 15:30:30)select TIMESTAMPDIFF(DAY,2020-9-1 15:30:30,now())
-- HOURselect TIMESTAMPDIFF(HOUR,now(),2020-9-1 15:30:30)select TIMESTAMPDIFF(HOUR,2020-9-1 15:30:30,now())
-- MINUTEselect TIMESTAMPDIFF(MINUTE,now(),2020-9-1 15:30:30)select TIMESTAMPDIFF(MINUTE,2020-9-1 15:30:30,now())
-- SECONDselect TIMESTAMPDIFF(SECOND,now(),2020-9-1 15:30:30)select TIMESTAMPDIFF(SECOND,2020-9-1 15:30:30,now())3.查询距离时间的间隔时间
-- 根据时间间隔计算时间
A.T_DATE B.T_DATE interval 1 -- hour——即 A表时间 B表时间 1小时也可以为分钟、秒。
# 或者
DATE_ADD(date,INTERVAL expr unit)
DATE_SUB(date,INTERVAL expr unit)时间间隔字面量说明INTERVAL 1 YEAR时间间隔为1年INTERVAL 2 Month时间间隔为2月INTERVAL 3 DAY时间间隔为3天INTERVAL 4 HOUR时间间隔为4小时INTERVAL 25 MINUTE时间间隔为25分钟INTERVAL 45 SECOND时间间隔为45秒
select NOW(), NOW() INTERVAL 1 year
select DATE_ADD(NOW(),INTERVAL 1 year)4.常用的字符串函数
函数名返回值函数名返回值ASCII(char)返回字符的ASCII码值LTRIM(str)从字符串str中切掉开头的空格BIT_LENGTH(str)返回字符串的比特长度TRIM(str)去除字符串首部和尾部的所有空格CONCAT(s1,s2…,sn)将s1,s2…,sn连接成字符串QUOTE(str)用反斜杠转义str中的单引号CONCAT_WS(sep,s1,s2…,sn)将s1,s2…,sn连接成字符串并用sep字符间隔POSITION(substr in str)返回子串substr在字符串str中第一次出现的位置从1开始LOWER(str)返回将字符串str中所有字符改变为小写后的结果UPPER(str)返回将字符串str中所有字符转变为大写后的结果LEFT(str,x)返回字符串str中最左边的x个字符STRCMP(s1,s2)比较字符串s1和s2LENGTH(s)返回字符串str中的字符数REVERSE(str)返回颠倒字符串str的结果
-- 字符函数
select concat(hello,你好,!)
select concat_ws(,,hello,你好,!)5.常用的数学函数
函数名返回值函数名返回值ABS(x)返回x的绝对值LOG(x,y)返回x的以y为底的对数BIN(x)返回x的二进制MOD(x,y)返回x/y的模余数CEILING(x)返回大于x的最小整数值PI()返回pi的值圆周率EXP(x)返回值e自然对数的底的x次方SIGN(x)返回代表数字x的符号的值FLOOR(x)返回小于x的最大整数值ROUND(x,y)返回参数x的四舍五入的有y位小数的值GREATEST(x1,x2,…,xn)返回集合中最大的值RAND()返回到内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成LEAST(x1,x2,…,xn)返回集合中最小的值SQRT(x)返回一个数的平方根LN(x)返回x的自然对数TRUNCATE(x,y)返回数字x截短为y位小数的结果
-- 数学函数
-- 向上取整
select ceiling(3.111)
-- 向下取整
select floor(3.111)
-- 四舍五入保留一位小数
select round(3.988,1)
-- 截断 结果3.99
select truncate(3.998,2)6.常用的聚合函数
函数名返回值AVGcol返回指定列的平均值COUNT(col)返回指定列中非NULL值的个数MIN(col)返回指定列的最小值MAX(col)返回指定列的最大值SUM(col)返回指定列的所有值之和GROUP_CONCAT(col)返回由属于一组的列值连接组合而成的结果
2、慢查询
1.什么是慢查询
MySQL默认10秒内没有响应SQL结果则为慢查询这个时间是可以修改的。
MySQL的慢查询的操作
-- 显示到mysql数据库的连接数
show status like connections;
-- 查看慢查询的状态
Show variables like %slow_query%;
-- 设置慢查询的到表 mysql.slow_log
set global log_outputTABLE;
-- 设置慢查询的时间
set global long_query_time3;
-- 开启慢查询
set global slow_query_logON;
-- 慢查询的次数
show status like slow_queries;
-- 慢查询记录
select * From mysql.slow_log ;
-- 慢查询sql语句
select convert(sql_text using utf8) sql_text from mysql.slow_log
-- 关闭慢查询
set global slow_query_logOFF;show index FROM student执行该语句结果中的cardinality是覆盖项cardinality/count(*) 越接近1 越好 越接近0 越差或是distinct(ename) / count(*)两者的结果相近。index_type是索引类型使用的是Btree / Btree 当我们在查询前能可以先估计查询究竟要涉及多少行、使用哪些索引、运行时间mysql提供了相应的功能和语法来实现该功能。在SQL语句前加一个EXPLAIN即可。 比如我们要分析如下SQL语句
explain select * from table where table.id 1类似于下面的表 EXPLAIN列的解释 table 显示这一行的数据是关于哪张表的 type 这是重要的列显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、 indexhe和ALL 说明不同连接类型的解释按照效率高低的顺序排序 system表只有一行system表。这是const连接类型的特殊情况。 const 表中的一个记录的最大值能够匹配这个查询索引可以是主键或惟一索引。因为只有一行这个值实际就是常数因为MYSQL先读这个值然后把它当做常数来对待。 eq_ref在连接中MYSQL在查询时从前面的表中对每一个记录的联合都从表中读取一个记录它在查询使用了索引为主键或惟一键的全部时使用。 ref这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分比如利用最左边前缀时发生。对于之前的表的每一个行联合全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好。 range这个连接类型使用索引返回一个范围中的行比如使用或查找东西时发生的情况。 index这个连接类型对前面的表中的每一个记录联合进行完全扫描比ALL更好因为索引一般小于表数据。 ALL这个连接类型对于前面的每一个记录联合进行完全扫描这一般比较糟糕应该尽量避免。 possible_keys 显示可能应用在这张表中的索引。如果为空没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句 key 实际使用的索引。如果为NULL则没有使用索引。很少的情况下MYSQL会选择优化不足的索引。这种情况下可以在SELECT语句中使用USE INDEXindexname来强制使用一个索引或者用IGNORE INDEXindexname来强制MYSQL忽略索引 key_len 使用的索引的长度。在不损失精确性的情况下长度越短越好 ref 显示索引的哪一列被使用了如果可能的话是一个常数 rows MYSQL认为必须检查的用来返回请求数据的行数 Extra 关于MYSQL如何解析查询的额外信息。是Using temporary和Using filesort意思MYSQL根本不能使用索 引结果是检索会很慢 说明extra列返回的描述的意义 Distinct 一旦mysql找到了与行相联合匹配的行就不再搜索了。 Not exists mysql优化了LEFT JOIN一旦它找到了匹配LEFT JOIN标准的行就不再搜索了。 Range checked for each Recordindex map:# 没有找到理想的索引因此对从前面表中来的每一个行组合mysql检查使用哪个索引并用它来从表中返回行。这是使用索引的最慢的连接之一。 Using filesort 看到这个的时候查询就需要优化了。mysql需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行。 Using index 列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的这发生在对表的全部的请求列都是同一个索引的部分的时候。 Using temporary 看到这个的时候查询需要优化了。这里mysql需要创建一个临时表来存储结果这通常发生在对不同的列集进行ORDER BY上而不是GROUP BY上。 Where used 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行并且连接类型ALL或index这就会发生或者是查询有问题。