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. linux解压类型总结

    1.*.tar 用 tar –xvf 解压2.*.gz 用 gzip -d或者gunzip 解压3.*.tar.gz和*.tgz 用 tar –xzf 解压4.*.bz2 用 bzip2 -d或者用b ...

  2. Vue:(四)Ajax(Vue-Resource)

    Vue 要实现异步加载需要使用到 vue-resource 库.(挂载到vue实例上) (一)Vue-Resource引入 <script src="https://cdn.stati ...

  3. scp免密操作

    scp免密操作 2.1服务器(本机)从目标服务器上传/下载文件或者文件夹 2.2生成秘钥 本机执行:ssh-keygen -t rsa 遇到提示,直接回车就OK,秘钥生成在用户的根目录的.ssh目录下 ...

  4. Fedora 23 U盘启动出现“Failed to load ldlinux.c32”解决

    利用UltraISO制作了Fedora 23的U盘启动,开机F12键USB启动时出现 Failed to load ldlinux.c32 Boot failed: please change dis ...

  5. NodeJS中使用swig模板引擎

    NodeJS中的默认引擎是jade有点过于复杂,而且不是以HTML为基础的,学习成本和前端适应成本都很大.而ejs虽然简单,但不支持模板导入,而且效率一般. swig的语法简单,学习成本很低,符合常规 ...

  6. SpringCloud服务负载均衡实现原理02

  7. SVN 常见报错

    1.svn is out of date 出错原因:SVN服务器端的版本比你的版本要新,不允许提交.     解决方案1:右键你所要提交的文件,team-->update 更新最新版本 然后再提 ...

  8. Android 音视频深入 九 FFmpeg解码视频生成yuv文件(附源码下载)

    项目地址,求star https://github.com/979451341/Audio-and-video-learning-materials/tree/master/FFmpeg(MP4%E8 ...

  9. JQ 向上查找指定 同辈元素 找到后返回

    由于JQ 只有 prev() 和 prevAll() prev()只能找一个 prevAll()把所有的都给找了 我想要的是: 在同辈元素中向上找,直到找到 我指定的元素 后,返回他. 所以自己写了个 ...

  10. leetcode python 007

    ##  翻转整数def evert(int0):    if int0<0:        flg=1    else:        flg=0    e=int(str(int0)[flg: ...