MySql技巧个人笔记

 百家乐概况     |      2019-12-08 17:17

MySql手艺个人笔记

1.数据null时sum的用法

 

mysql数据库SUM(A+B卡塔尔国不必然等于SUM(A卡塔尔国+SUM(B卡塔尔,当A或B为NULL时,SUM(A+B卡塔尔(英语:State of Qatar)=NULL。

 

2.or改为in

 

同一字段,将or改写为in(卡塔尔国。OR功效:O(n卡塔尔(英语:State of Qatar);IN成效:O(Log n卡塔尔国;当n非常的大时,O凯雷德会慢相当多。注意调整in的个数,建议n小于200。

图片 1

  1. or和union的效率

 

(1)分化字段,将or改为union。

图片 2

(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。

图片 3

6.将字符调换为数字

 

数字型VS字符串型索引:数字型更神速、查询更加快、占用空间越来越小。

 

7.拒绝大SQL

 

 拒绝大sql,拆解成多条轻松sql:

 

(1)或然一条大sql就把全路数据库堵死;

 

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

 

(3)收缩锁表时间,特别是MyISAM;

 

(4)用上多cpu,一条sql只好在叁个cpu中运作。

 

  1. Load data导数据

 

  批量数目块导入:

 

(1)成批装载比单行李装运载越来越快,无需每一趟都刷新缓存;

 

(2)无索引装载法郎引装载更加快;

 

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

 

(4)Load data 比Insert快约20倍

 

尽大概不要用insert….select….

 

(1) 延迟

 

(2)同步出错

 

9.击溃大量更新

 

(1)大批量改善深夜操作,避开高峰

 

(2)早上不限制

 

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

图片 4

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

 

总计,int(M卡塔尔 zerofill,加上zerofill后M才表现出有一点点点效果,比方 int(3卡塔尔(قطر‎zerofill,你插入到数据Curry的是10,则实在插入为010,相当于在前方补充加了叁个0.假若int(3卡塔尔(英语:State of Qatar)和int(10卡塔尔不加zerofill,则它们从不什么分化.M不是用来节制int个数的.

 

瞩目:这里的M代表的实际不是储存在数据库中的具体的长短,早先老是会误感觉int(3卡塔尔国只好存款和储蓄3个长度的数字,int(11卡塔尔国就能够蕴藏千克个长度的数字,那是大谬不然的。

 

 

其实当大家在筛选采用int的类别的时候,不论是int(3卡塔尔(قطر‎依旧int(11卡塔尔国,它在数据Curry面储存的都以4个字节的长度,在运用int(3卡塔尔国的时候假若你输入的是10,会暗中同意给您存款和储蓄位010,也等于说那几个3表示的是默许的一个尺寸,当您相差3位时,会帮你不全,当你超越3位时,就从未任何的影响。

 

11.count(distinct field)是魔鬼

Count(distinct 田野先生卡塔尔国查询功用十分的低,数据量大时以至会暴光内部存储器不足。优化技艺:使用不经常表概念,先把distinct的田野(field卡塔尔国经过group by过滤后,再对其進展count总结。

 

优化前:

图片 5

优化后:

图片 6

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(卡塔尔(英语:State of Qatar)重临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 '1' THEN '男'   

 

WHEN '2' THEN '女'   

 

ELSE '其他' END  

 

假设case 未有条件,when 里面能够加个条件判定

 

--Case寻找函数  

 

CASE WHEN sex = '1' THEN '男'   

 

WHEN sex = '2' 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);

1.多少null时sum的用法 mysql数据库SUM(A+B卡塔尔不分明等于SUM(A卡塔尔(英语:State of Qatar)+SUM(B卡塔尔(قطر‎,当A或B为NULL时,SUM(A+B卡塔尔=NULL。 2.or改为in 同一字段,将or改写...