有关网址:

MySQL 性能优化神器 Explain 使用分析

MySQL - EXPLAIN详解

1、时间比较

mysql> SELECT something FROM table 

WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; 

2、时间戳比较

select * from ds_order where order_state = 10 and (unix_timestamp(now()) - add_time)>600

3、在大数据的情况下,内连接是比外连接要快很多

join 处理出来13000左右,大概是7秒

left join == LEFT OUTER JOIN 处理出来23000左右,大概是49秒

4、mysql查最近的值,比如18查询最近的值,17,18,19

SELECT

*

FROM

(

SELECT DISTINCT

(user_id),

rob_prize

FROM

ds_purchase_record

WHERE

rob_prize <> 18

OR rob_prize = 18

ORDER BY

ABS(rob_prize-18) ASC

) AS one

GROUP BY

user_id

order by ABS(rob_prize-18) ASC;

5、用到and or

or 的写法要写()

select * from message where (typeid=31) or (typeid=30) or (typeid=32) or (typeid=33) order by id desc;

6、存储过程与创建函数的使用

存储过程与自定义函数的不同,存储过程可以返回多个字段,自定义函数只能返回一个字段

(1)存储过程:

# 删除过程

DROP PROCEDURE IF EXISTS getOrderInfo;

# 创建过程,只有IN的

delimiter //

CREATE PROCEDURE getOrderInfo(IN oid int(11))

BEGIN

select * from ds_order where order_id=oid;

END //

delimiter ;

call getOrderInfo(21);

# 删除过程

DROP PROCEDURE IF EXISTS getOrderField;

#创建过程,有IN(条件字段)的,也有OUT(输出字段)的

delimiter //

CREATE PROCEDURE getOrderField(IN oid int(11),OUT sn VARCHAR(255))

BEGIN

select order_sn INTO sn from ds_order where order_id=oid;

END //

delimiter ;

call getOrderField(21,@sn);

SELECT @sn;

# 删除过程

DROP PROCEDURE IF EXISTS getInfo;

delimiter //

CREATE PROCEDURE getInfo(IN oid int(11),IN dtable VARCHAR(25))

BEGIN

set @s = concat("select * from ",dtable," WHERE order_id = ",oid);

prepare stmt from @s; #预定义SQL

execute stmt; #填充SQL

DEALLOCATE prepare stmt; #

END //

delimiter;

call getInfo(21,'ds_order');

7、根据条件排序

SELECT

fg.*, a.uid,

a.if_boss,

CASE

WHEN (a.if_boss = 0 && uid = 179150) THEN

1

WHEN (a.if_boss is null) THEN

2

END AS num

FROM

ds_fight_group AS fg

LEFT JOIN ds_assemble AS a ON fg.fg_id = a.fg_id

ORDER BY

num ASC

SELECT

count(

CASE

WHEN da.if_boss = a.id THEN

1

ELSE

NULL

END

) as `_member`,

count(case when o.order_state>10 then 1 else null end) as `_order_count`,

a.uid,

a.id,

a.a_type

FROM

ds_assemble AS a

LEFT JOIN ds_assemble AS da ON da.if_boss = a.id

LEFT JOIN ds_order as o on o.order_sn=da.order_sn

WHERE

a.id > 0

AND a.if_boss = 0

GROUP BY

a.id

注意点:如果要判断null的话,这里要写 is null

SELECT

count(

CASE

WHEN da.if_boss = a.id THEN

1

ELSE

NULL

END

) AS fnum,

count(

CASE

WHEN o.order_state > 10 THEN

1

ELSE

NULL

END

) AS onum,

a.*, wx.avatar,

wx.mobile

FROM

ds_assemble AS a

LEFT JOIN ds_assemble AS da ON da.if_boss = a.id

LEFT JOIN ds_order AS o ON o.pay_sn = da.order_sn

LEFT JOIN ds_member AS m ON a.uid = m.member_id

LEFT JOIN ds_wxtempuser AS wx ON m.member_name = wx.mobile

LEFT JOIN ds_order AS orr ON a.order_sn = orr.pay_sn

WHERE

1 = 1

AND a.id > 0

AND a.if_boss = 0

AND a.fg_id = 7

AND (

a.add_time + 62400 > 1557133850

)

AND orr.order_state > 10

GROUP BY

a.id

HAVING

a.a_type > (onum + 1)

LIMIT 0,10

全部竞猜记录

SELECT

m.member_name,

gr.`name`,

gr.gj_id,

pr.rob_prize,

pr.addtime,

pr.pay_sn

FROM

ds_purchase_record AS pr

LEFT JOIN ds_member AS m ON pr.user_id = m.member_id

LEFT JOIN ds_grabjade AS gr ON pr.gid = gr.gj_id

ORDER BY

addtime DESC

根据一条纪录的维度查已售数量

SELECT

count(

CASE

WHEN da.if_boss = a.id THEN

1

ELSE

NULL

END

) AS fnum,

count(

CASE

WHEN da.a_status=1 && da.uid>0 THEN

1

ELSE

NULL

END

) AS onum,

a.*

FROM

ds_assemble AS a

LEFT JOIN ds_assemble AS da ON da.if_boss = a.id

WHERE

1 = 1

AND a.id > 0

AND a.if_boss = 0

AND a.fg_id = 16

and a.a_status=1

GROUP BY

a.id

这是保存的时间格式

<!-- 按日查询 -->   SELECT DATE_FORMAT(created_date,'%Y-%m-%d') as time,sum(money) money FROM o_finance_detail where org_id = 1000  GROUP BY  time   <!-- 按月查询 -->   SELECT DATE_FORMAT(created_date,'%Y-%m') as time,sum(money)  money FROM o_finance_detail where org_id = 1000  GROUP BY  time   <!-- 按年查询 -->   SELECT DATE_FORMAT(created_date,'%Y') as time,sum(money)  money FROM o_finance_detail where org_id = 1000  GROUP BY  time    <!-- 按周查询 -->   SELECT DATE_FORMAT(created_date,'%Y-%u') as time,sum(money)  money FROM o_finance_detail where org_id = 1000  GROUP BY  time

使用 FROM_UNIXTIME 可以把时间戳转换为日期:

select FROM_UNIXTIME(invest_time,'%Y年%m月%d') from crm_invest_apply

按指定排序

select * from fc_image where i_id in (50,42,58,41,43,44,60) ORDER BY field(i_id,50,42,58,41,43,44,60)

mysql也可以用IF来做判断

SELECT

age,

IF (

age = 10, // 条件

'你好', // 为true时的答案

'你不好' // 为false时的答案

) cn

FROM

fc_optimization

☐ HAVING cn = '你好' //最后的条件,不能用where去查条件,会报错

mysql高级扩展的更多相关文章

  1. mysql笔记04 MySQL高级特性

    MySQL高级特性 1. 分区表:分区表是一种粗粒度的.简易的索引策略,适用于大数据量的过滤场景.最适合的场景是,在没有合适的索引时,对几个分区进行全表扫描,或者是只有一个分区和索引是热点,而且这个分 ...

  2. 24.Mysql高级安装和升级

    24.Mysql高级安装和升级24.1 Linux/Unix平台下的安装 24.1.1 安装包比较Linux下的Mysql安装包分为RPM包.二进制包.源码包3种.RPM包优点是安装简单,适合初学者: ...

  3. Mysql 高级部分

    MySQL 高级部分   (1)索引(index)..................................................................... 1 (2) ...

  4. 干货:鲜为人用的MySQL高级特性与玩法!

    上一篇文章<万字总结:学习MySQL优化原理,这一篇就够了!>文末给大家留有两个开放的问题: 有非常多的程序员在分享时都会抛出这样一个观点:尽可能不要使用存储过程,存储过程非常不容易维护, ...

  5. 「MySQL高级篇」MySQL索引原理,设计原则

    大家好,我是melo,一名大二后台练习生,大年初三,我又来充当反内卷第一人了!!! 专栏引言 MySQL,一个熟悉又陌生的名词,早在学习Javaweb的时候,我们就用到了MySQL数据库,在那个阶段, ...

  6. 「MySQL高级篇」MySQL锁机制 && 事务

    大家好,我是melo,一名大三后台练习生,最近赶在春招前整理整理发过的博客~! 引言 锁锁锁,到哪到离不开这桩琐事,并发琐事,redis琐事,如今是MySQL琐事,这其中琐事,还跟MySQL另一个重要 ...

  7. PHP安装mysql.so扩展

    在PHP中mysql_connect模块已经逐渐被弃用,我在搭建环境时也没有再安装mysql扩展,但是今天在维护一个老项目时,出现报错 Fatal error: Uncaught Error: Cal ...

  8. Mysql高级之权限检查原理

    原文:Mysql高级之权限检查原理 用户进行数据库操作分为两步: 1 是否有权限连接,根据host,name,password: 2 是否有权限进行CURD: 图示解说: 关于用户权限在哪里进行存放? ...

  9. Mysql高级之触发器

    原文:Mysql高级之触发器 触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete). 看以下事件: 完 ...

随机推荐

  1. xcode7中搭建python开发环境

    1. 双击打开Xcode 2. 点击File->New->New Project 3. 在左边的面板选择Other,右边选择External Build Sytem,点击Next 4. 输 ...

  2. I-Just Jump_2019牛客暑期多校训练营(第八场)

    题目链接 Just Jump 题意 有L+1个点,初始在第0个点上,要跳到第L个点,每次至少跳d格,也就是在点x至少要跳到x+d,且有m个限制 \((t_i, p_i)\)指跳第\(t_i\)次不能跳 ...

  3. lightoj 1248-G - Dice (III) (概率dp)

    题意:给你n个面的骰子,问扔出所有面的期望次数. 虽然这题挺简单的但还是要提一下.这题题目给出了解法. E(m)表示得到m个不同面的期望次数. E(m+1)=[((n-m)/n)*E(m)+1]+(m ...

  4. CodeForces Round #498 div3

    A: 题目没读, 啥也不会的室友帮我写的. #include<bits/stdc++.h> using namespace std; #define Fopen freopen(" ...

  5. dp递推题2010年吉林省省赛 1456: 逃票的chanming(3)

    1456: 逃票的chanming(3) 时间限制: 2 Sec  内存限制: 128 MB提交: 326  解决: 48[提交][状态][讨论版] 题目描述 这是一个神奇的国度.     这个国度一 ...

  6. PAT L1-043. 阅览室

    L1-043. 阅览室 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者 ...

  7. 几个Python爬虫工具介绍

    Request Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用 上面一句话 出自Requests官方文档的第一句,从而奠定了其逗逼的文档风格.类似的还有: 警告: ...

  8. 【Spring】 IOC Base

    一.关于容器 1. ApplicationContext和BeanFactory 2. 配置文件 XML方式 Java-configuration 方式 @Configuration 3. 初始化容器 ...

  9. 洛谷 P1181数列分段Section I

    星爆气流(弃疗)斩!                                            ——<刀剑神域> 题目:https://www.luogu.org/proble ...

  10. php文件加密解密

    利用base64加解密 base64_encode是加密,而base64_decode是解密 语法:string base64_encode(string data);   语法:string bas ...