有关网址:

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. testlink+vertrigoServ搭建测试用例管理系统

    1.testlink简介 Testlink是一个开源的基于web的测试用例管理系统,主要功能是测试用例的创建.管理和执行,并且提供了一些简单的统计功能. 目前的公司没有专用的测试用例管理系统,为了测试 ...

  2. atcoder D - 11(组合数学)

    题目链接:http://arc077.contest.atcoder.jp/tasks/arc077_b 题解:有n+1个数只有一个数字是有重复出现的,要求一共有多少不同的组合显然和这两个数的位置有关 ...

  3. codeforces 284 D. Cow Program(记忆化搜索)

    题目链接:http://codeforces.com/contest/284/problem/D 题意:给出n个数,奇数次操作x,y都加上a[x],偶数次操作y加上a[x],x减去a[x],走出了范围 ...

  4. java中的GC

    1.GC发生在JVM中的堆区 2.GC是很么? 1.次数上频繁收集Young区  Minor  GC 2.次数上较少收集Old区       Full      GC 3.基本不动的Perm区 3.G ...

  5. SQL DROP INDEX 语句

    SQL DROP INDEX 语句 我们可以使用 DROP INDEX 命令删除表格中的索引. 用于 Microsoft SQLJet (以及 Microsoft Access) 的语法: DROP ...

  6. Linux 笔记 - 第十八章 Linux 集群之(三)Keepalived+LVS 高可用负载均衡集群

    一.前言 前两节分别介绍了 Linux 的高可用集群和负载均衡集群,也可以将这两者相结合,即 Keepalived+LVS 组成的高可用负载均衡集群,Keepalived 加入到 LVS 中的原因有以 ...

  7. jmeter 查看结果树数据分析 优化

    1.点击查看结果树,配置 2.筛选功能项

  8. python+selenium一:对浏览器的常规操作

    # 1.打开Firefox浏览器 from selenium import webdriverdriver = webdriver.Firefox()driver.get("https:// ...

  9. Day 23 系统服务之救援模式

    1.CentOS6与Centos 7启动流程 4.运行级别C6&C7 0 关机 1 单用户模式 (超级权限 必须面对实体硬件) 2 暂未使用 3 字符界面(黑框) 4 暂未使用 5 图形界面 ...

  10. java架构之路-(JVM优化与原理)JVM之G1回收器和常见参数配置

    过去的几天里,我把JVM内部的垃圾回收算法和垃圾回收器.还剩下最后一个G1回收器没有说,我们今天数一下G1回收器和常见的参数配置. G1回收器 G1 (Garbage-First)是一款面向服务器的垃 ...