MySQL数据库优化的八种方式(经典必看)

建表

CREATE TABLE if not EXISTS `bb` (
`id` int not null primary key auto_increment,
`aab001` varchar(20) DEFAULT NULL COMMENT '参保组织编号',
`aab003` varchar(20) DEFAULT NULL COMMENT '组织机构代码',
`aae044` varchar(100) DEFAULT NULL COMMENT '单位名称',
`pre_rs` decimal(8,0) DEFAULT NULL COMMENT '应缴人数',
`cur_rs` decimal(8,0) DEFAULT NULL COMMENT '应缴人数',
`rs` decimal(9,0) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; create table if not EXISTS aa as SELECT * from bb;
create table cc like aa;

  

表操作

# 改表名
rename table `aa` to `aaa`;
ALTER TABLE cc RENAME TO orbit
# 删表
drop table if exists tmp;
# 更新字段
UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = 'M'
# 删除行
DELETE FROM EMPLOYEE WHERE AGE > 20
# 插入数据
INSERT INTO cc SELECT * FROM orbit WHERE xttime > '2018-04-16 00:00:00' AND xttime <= '2018-04-17 00:00:00'; #分批插入

  

 

A、B两表,找出ID字段存在A表,但是不存在B表的数据。A表总共13w数据,去重后约3W条,B表有2W条,且B表的ID字段有索引

方法一:1.395秒
select distinct A.ID from A where A.ID not in (select ID from B)
方法二:0.739秒
select A.ID from A left join B on A.ID=B.ID where B.ID is null
方法三:0.570秒
select * from B where (select count(1) from A where A.ID = B.ID) = 0

  

长表转宽表

SELECT
userkey,
MAX(CASE tagid
WHEN 1 THEN valueID
ELSE NULL
END) AS tag1,
MAX(CASE tagid
WHEN 2 THEN valueID
ELSE NULL
END) AS tag2
FROM
userdata
WHERE
tagid IN (1 , 2)
GROUP BY userkey

  

分组排序
--方法一: 该方法目前会报错,暂不知如何解决
select
x,y,z
from
(
select
x,y,z
from
a
order by
y desc
limit
1000(大于总行数)
) t
group by
x --方法二:子查询
SELECT
machine, deny_flow, total_flow, time
FROM
total_freq_ctrl A
WHERE
1 > (SELECT COUNT(machine) FROM total_freq_ctrl WHERE machine = A.machine AND time > A.time)
AND A.module = 'all'
ORDER BY
A.time desc; --方法三
set @row=0;set @mid='';
select
a.*,b.rownum
from
total_freq_ctrl a
inner join
(
SELECT
module, machine, time,
case when @mid = machine then @row:=@row+1 else @row:=1 end rownum,
@mid:=machine mid
FROM
total_freq_ctrl
order by
module,machine,time desc
) b on b.module=a.module and b.machine=a.machine and b.time=a.time
where
  b.rownum<5; --改为下面的也可以
SET @R = 0;
SET @mid = '';
SELECT
*
FROM
(
SELECT
test1.*,
( CASE WHEN @mid = a THEN @R := @R + 1 ELSE @R := 1 END ) AS rownum,
@mid := a midnum
FROM
test1
ORDER BY
a,b DESC
) t
WHERE
rownum < 2

  

  

												

mysql 分组排序前n + 长表转宽表的更多相关文章

  1. MySQL分组排序(取第一或最后)

    MySQL分组排序(取第一或最后) 方法一:速度非常慢,跑了30分钟 SELECT custid, apply_date, rejectrule FROM ( SELECT *, IF ( , ) A ...

  2. mysql分组排序加序号(不用存储过程,就简简单单sql语句哦)

    做前端好长时间了,好久没动sql了.在追一个喜欢的女孩,做测试的,有这么个需求求助与本屌丝,机会难得,开始折腾起来,配置mysql,建库,建表.... 一 建表 CREATE TABLE `my_te ...

  3. mysql 分组排序取最值

    查各个用户下单最早的一条记录 查各个用户下单最早的前两条记录 查各个用户第二次下单的记录 一.建表填数据: SET NAMES utf8mb4; -- 取消外键约束 ; -- ------------ ...

  4. mysql分组查询前n条数据

    建表: CREATE TABLE hard(id INT,aa varchar(50) ,bb INT,PRIMARY key(id))insert into hard values(1,'a',9) ...

  5. mysql分组取前N记录

    http://blog.csdn.net/acmain_chm/article/details/4126306 http://bbs.csdn.net/topics/390958705 1 我只用到了 ...

  6. mySql分组排序

    mysql 排序学习---mysql 1.建表语句 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varc ...

  7. mysql分组排序取最大值所在行,类似hive中row_number() over partition by

    如下图, 计划实现 :按照 parent_code 分组, 取组中code最大值所在的整条记录,如红色部分.(类似hive中: row_number() over(partition by)) sel ...

  8. MYSQL 分组排序

    http://www.cnblogs.com/merru/articles/4626045.html SELECT a.shop_id, a.price, count(*) as rankFROM m ...

  9. mysql 分组查询前n条数据

    今天去面试,碰到一道面试题: 有一个学生成绩表,表中有 表id.学生名.学科.分数.学生id .查询每科学习最好的两名学生的信息: 建表sql: CREATE TABLE `stuscore` ( ` ...

随机推荐

  1. C#关于多线程及线程同步 lock锁的应用

    Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...

  2. iOS10 后 http 网页定位失效解决方案

    最近公司开发一个app项目H5+ MUI框架进行开发的,开发的相关人员离职后,我这个小菜鸟...都是泪(从未接触过app开发) 项目要嵌入百度地图,由于已经做了微信版本的,想着还是用js api 做吧 ...

  3. ubuntu 关闭 笔记本键盘背景灯

    /etc/rc.local 加入 ' > /sys/class/leds/tpacpi::kbd_backlight/brightness

  4. [Oracle11g] 通过伪列查询

    oracle中的伪列默认第一行是1,所以可以选择<=rownum的方法选取,但是>是无法选取的.这时候需要固化伪列. 固化前可以这样查询:select * from  表名 where r ...

  5. 字节顺序标记——BOM,Byte Order Mark

    定义 BOM(Byte Order Mark),字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码.     介绍 UTF-8 不需要 BOM,尽管 Unico ...

  6. 前端布局神器display:flex

    2009年,W3C提出了一种新的方案--Flex布局,可以简便.完整.响应式地实现各种页面布局.目前已得到所有现在浏览器的支持.   flex浏览器支持 一.Flex布局是什么? Flex是Flexi ...

  7. java接口入参模板化,适用于企业化服务远程调度模板化的场景,接口入参实现高度可配置化

    需求:远程服务接口模板化配置提供接入服务 模板接口分为三个模块:功能路由.参数校验.模板入库 路由:这里的实现方式很简单,就是根据业务标识找到对应的处理方法 参数校验: 参数校验这步涉及模板和校验类两 ...

  8. python 爬虫 记录

    python3 爬虫需要安装:requests,beautifulsoup4,html5lib 带有中文的需要这样写,要不然就会出现乱码 html = response.content.decode( ...

  9. Discuz!安装搭建

    Discuz!介绍 Discuz!是一款由php语言开发的论坛源代码包,运行在lamp平之上或者lnmp之上,点击此处打开官方网站 环境介绍 本次安装采用最简配置,全部用yum安装,php采用模块方式 ...

  10. php加密

    域名授权函数 function allow_doamin(){    $is_allow=false;    $url=trim($_SERVER['SERVER_NAME']);    $arr_a ...