MySql技巧个人笔记

时间:2022-01-12 12:45:31

1.数据null时sum的用法

mysql数据库SUM(A+B)不一定等于SUM(A)+SUM(B),当A或B为NULL时,SUM(A+B)=NULL。

2.or改为in

同一字段,将or改写为in()。OR效率:O(n);IN效率:O(Log n);当n很大时,OR会慢很多。注意控制in的个数,建议n小于200。

MySql技巧个人笔记

3. or和union的效率

(1)不同字段,将or改为union。

MySql技巧个人笔记

(2)相同字段(针对单表操作)

对于索引列来最好使用union all,因复杂的查询【包含运算等】将使or、in放弃索引而全表扫描,除非你能确定or、in会使用索引。对于只有非索引字段来说你就老老实实的用or 或者in,因为 非索引字段本来要全表扫描而union all 只成倍增加表扫描的次数。对于及有索引字段【索引字段有效】又包含非索引字段来时,按理你也使用or 、in或者union all 都可以,但是我推荐使用or、in。

4.union all与union

若无需对结果进行去重,则用union all 而非union;union会自动对结果去重,有去重开销。

5.Group by去除排序

Gourp by 实现分组、自动排序。则无需排序:order by null。

MySql技巧个人笔记

6.将字符转换为数字

数字型VS字符串型索引:数字型更高效、查询更快、占用空间更小。

7.拒绝大SQL

拒绝大sql,拆解成多条简单sql:
(1)可能一条大sql就把整个数据库堵死;

(2)简单sql缓存命中率更高;

(3)减少锁表时间,特别是MyISAM;

(4)用上多cpu,一条sql只能在一个cpu中运行。

8. Load data导数据

批量数据块导入:

(1)成批装载比单行装载更快,不需要每次都刷新缓存;

(2)无索引装载比索引装载更快;

(3)Insert values,values,values减少索引刷新;

(4)Load data 比Insert快约20倍

尽量不要用insert….select….

(1) 延迟

(2)同步出错

9.打散大批量更新

(1)大批量更新凌晨操作,避开高峰

(2)凌晨不限制

(3)白天上限默认为100条/秒(特殊再议)

MySql技巧个人笔记

10. mysql int(3)与int(11)的区别

总结,int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果int(3)和int(10)不加zerofill,则它们没有什么区别.M不是用来限制int个数的.

注意:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。

其实当我们在选择使用int的类型的时候,不论是int(3)还是int(11),它在数据库里面存储的都是4个字节的长度,在使用int(3)的时候如果你输入的是10,会默认给你存储位010,也就是说这个3代表的是默认的一个长度,当你不足3位时,会帮你不全,当你超过3位时,就没有任何的影响。

11.count(distinct field)是魔鬼

Count(distinct field)查询效率极低,数据量大时甚至会爆出内存不足。优化技巧:使用临时表概念,先把distinct的field 经过group by过滤后,再对其进行count计算。

优化前:

MySql技巧个人笔记

优化后:

MySql技巧个人笔记

12.mysql函数

(1)replace函数

   Update tr_app_data  set content = replace(content,'SGSN206','SGSN1') where app_data_cat='AlarmMonitor_Widget_195'

(2)concat函数

select concat(LAC,'_',CI) from `sheet1`

(3)IFNULL函数

IFNULL(expr1,expr2) ,如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值。

(4)IF函数

如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值,取决于它被使用的上下文。

(5)CASE WHEN函数

Case具有两种格式。简单Case函数和Case搜索函数

--简单Case函数 如果case有条件,when 只能是对条件值的罗列,不能再加条件,否则出错

CASE sex   

WHEN '' THEN '男'   

WHEN '' THEN '女'   

ELSE '其他' END  

如果case 没有条件,when 里面可以加个条件判断

--Case搜索函数

CASE WHEN sex = '' THEN '男'   

WHEN sex = '' THEN '女'   

ELSE '其他' END  

13.单表去重并保留id最小的一条

数据库现在不支持这样的操作(对一个表进行select等子操作后,然后对该表做delete或者updata这类的操作。so,可以用临时表解决。如下:

DELETE FROM table_test WHERE id NOT IN (SELECT id FROM (SELECT MIN(id) AS id FROM table_test AS t GROUP BY uid) t1);

MySql技巧个人笔记的更多相关文章

  1. MySQL:提高笔记-4

    MySQL:提高笔记-4 学完基础的语法后,进一步对 MySQL 进行学习,前几篇为: MySQL:提高笔记-1 MySQL:提高笔记-2 MySQL:提高笔记-3 MySQL:提高笔记-4,本文 说 ...

  2. 《高性能MySQL》读书笔记--锁、事务、隔离级别 转

    1.锁 为什么需要锁?因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对表中同一行记录进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进 ...

  3. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. mysql颠覆实战笔记&lpar;五&rpar;--商品系统设计&lpar;二&rpar;&colon;定时更新商品总点击量

    继续回到沈老师的MYSQL颠覆实战,首先回顾下上一节课的内容,请大家会看下上节课写的存储过程. 打开prod_clicklog表, 我们只要把日期(不含时分秒)的部分存在数据库中, 如果同一日期有相同 ...

  7. mysql颠覆实战笔记&lpar;四&rpar;--商品系统设计&lpar;一&rpar;&colon;商品主表设计

    版权声明:笔记整理者亡命小卒热爱*,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...

  8. mysql颠覆实战笔记&lpar;一&rpar;--设计一个项目需求,灌入一万数据先

    版权声明:笔记整理者亡命小卒热爱*,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...

  9. mysql颠覆实战笔记&lpar;七&rpar;--白话理解事务

    今天我们学习web开发级mysql颠覆实战课程第9课没MYSQL事务(一):白话理解事务.前面有两节课第7讲:商品系统设计(四):商品属性设计之自定义属性,第8讲:商品系统设计(五):一维属性的商品价 ...

随机推荐

  1. 《你不常用的c&num;之XX》

    你不常用的c#之一>:略谈unsafe http://blog.csdn.net/robingaoxb/article/details/6199508 <你不常用的c#之二>:略谈G ...

  2. &lbrack;速记!vs调试技巧&rsqb;

    当程序崩溃却又没有报错的时候,进入调试程序,断点处按Alt+7可以进入函数调用栈,甚至可以进入汇编栈,真的很有用,以后有时间学习汇编的话,估计这个功能会更加强大!

  3. CodeForces460B&period; Little Dima and Equation

    B. Little Dima and Equation time limit per test 1 second memory limit per test 256 megabytes input s ...

  4. 关于css的一些知识点整理

    一.标签的类型:   行内:span.a.b.i.strong.em.   1.共处一行   2.不支持设置宽高 display:block; 转换成块 块:h1-h6 p div  ul ol 1. ...

  5. 引擎设计跟踪&lpar;九&period;14&period;2g&rpar; 将GNUMake集成到Visual Studio

    最近在做纹理压缩工具, 以及数据包的生成. shader编译已经在vs工程里面了, 使用custom build tool, build命令是调用BladeShaderComplier, 并且每个文件 ...

  6. soap消息机制 讲解

    SOAP(Simple Object Access Protocol,简单对象访问协议)作为一种信息交互协议在分布式应用中非常广泛,如WebService.在使用.Net开发WebService时候, ...

  7. STL学习系列三:Deque容器

    1.Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. deque在接口上和vector非常 ...

  8. AE-分享&lt&semi;学习后&comma;制作的视频实例&gt&semi;小视频-与大家交流&excl;

  9. java基础知识拾遗&lpar;三&rpar;

    1.类加载 bootstrap classloader -引导(也称为原始)类加载器,它负责加载Java的核心类. extension classloader -扩展类加载器,它负责加载JRE的扩展目 ...

  10. 练习 HashSet 去重复

    package com.rf.xs.list; import java.util.HashSet; public class Person { private String name; private ...