首页 技术 正文
技术 2022年11月18日
0 收藏 501 点赞 2,527 浏览 2528 个字

作为一名小小的开发人员,刚入门的时候觉得很难,过了一段时间之后,发现很简单,很快就可以搞定很bug了。然而这并不能说明你就已经很牛掰了,只能说,你不了解其他太多的东西。应该说,数据库有几个共同的命令,select , update , insert, replace, delete , truncate, drop,只要你学会了,你就感觉你可以为所欲为了。但是在这里,我要总结一些体现水平的语句,而这些东西恰好直接体现你个人的水平和经验问题。

1、show processlist : 查看mysql的进程情况,在网站很慢的时候,你应该要想到是不是有很多死的进程或者很耗时的进程,如果确实是这样,那你应该结束到一些。 kill 99 .

执行状态分析:

Sleep状态通常代表资源未释放,如果是通过连接池,sleep状态应该恒定在一定数量范围内,实战范例:因前端数据输出时(特别是输出到用户终端)未及时关闭数据库连接,导致因网络连接速度产生大量sleep连接,在网速出现异常时,数据库too many connections挂死 Waiting for net, reading from net, writing to net

偶尔出现无妨,如大量出现,迅速检查数据库到前端的网络连接状态和流量

案例:因外挂程序,内网数据库大量读取,内网使用的百兆交换迅速爆满,导致大量连接阻塞在waiting for net,数据库连接过多崩溃Locked状态,有更新操作锁定,通常使用innodb可以很好的减少locked状态的产生,但是切记,更新操作要正确使用索引,即便是低频次更新操作也不能疏忽。如上影响结果集范例所示。在myisam的时代,locked是很多高并发应用的噩梦。所以mysql官方也开始倾向于推荐innodb。

Copy to tmp table

索引及现有结构无法涵盖查询条件,才会建立一个临时表来满足查询要求,产生巨大的恐怖的i/o压力。很可怕的搜索语句会导致这样的情况,如果是数据分析,或者半夜的周期数据清理任务,偶尔出现,可以允许。频繁出现务必优化之。

Copy to tmp table通常与连表查询有关,建议逐渐习惯不使用连表查询。

实战范例:

u 某社区数据库阻塞,求救,经查,其服务器存在多个数据库应用和网站,其中一个不常用的小网站数据库产生了一个恐怖的copy to tmp table操作,导致整个硬盘i/o和cpu压力超载。Kill掉该操作一切恢复。

Sending data

Sending data并不是发送数据,别被这个名字所欺骗,这是从物理磁盘获取数据的进程,如果你的影响结果集较多,那么就需要从不同的磁盘碎片去抽取数据,偶尔出现该状态连接无碍。回到上面影响结果集的问题,一般而言,如果sending data连接过多,通常是某查询的影响结果集过大,也就是查询的索引项不够优化。

如果出现大量相似的SQL语句出现在show proesslist列表中,并且都处于sending data状态,优化查询索引,记住用影响结果集的思路去思考。

Storing result to query cache出现这种状态,如果频繁出现,使用setprofiling分析,如果存在资源开销在SQL整体开销的比例过大(即便是非常小的开销,看比例),则说明query cache碎片较多,使用flush query cache可即时清理,也可以做成定时任务

Query cache参数可适当酌情设置。

Freeing items

理论上这玩意不会出现很多。偶尔出现无碍,如果大量出现,内存,硬盘可能已经出现问题。比如硬盘满或损坏。

i/o压力过大时,也可能出现Free items执行时间较长的情况。

Sorting for 和Sending data类似,结果集过大,排序条件没有索引化,需要在内存里排序,甚至需要创建临时结构排序。

其他还有很多状态,遇到了,去查查资料。基本上我们遇到其他状态的阻塞较少,所以不关心

2、checksum 在逻辑备份时候前后是否可以用于验证数据一致性;

load data [local] infile $filename INTO TABLE table_name TERMINATED BY ‘,’,从文件导入数据到数据库中。

指定Windows 路径名时,使用的是斜线而不是反斜线。如果要用反斜线,必须双写。

出于安全的原因,当读取位于服务器上的文本文件时,文件必须位于数据库目录下或者可以被所有用户读取。也就是说,当对服务器上的文件执行LOAD DATA INFILE 时,用户必须获得FILE 权限。

3、索引: 不必要的索引只会占用空间和时间,建立必要索引,唯一索引,主键索引。

4、联表操作:更新,updatetable1 t1 left join table2 t2 on t1.uid=t2.uid set t1.name=t2.name,t1.desc=’xxxx’ where t1.date=’2015-10-11′;删除:delete t1,t2,t3from table1 t1 left join table2 t2 on t1.uid=t2.uid inner join table3 t3 ont2.uid = t3.uid where t1.date=’2015-10-11′;事务:set@@autocommit=0;

  5、group by 多个字段的涵义,我本人曾想当然的认为,group by 是将数据组合起来,也就是说,假如第一个是相同的,后面就不用再分了,其实不是这样的,group by 不止有组合的作用,还有拆分的作用,即第一个相同,第二个不同,也会形成两行数据,这样就很符合我们想要的组合了!

  6、like语法, 通常,like ‘%test%’就够了, 但是如果某个字段存在’\’:这样的写法 like ‘%\%’,以及like ‘%\\%’都是不正确的。正确的写法是 like ‘%\\\\%’、原因:反斜线符号会被语法分析程序剥离一次,在进行模式匹配时,又会被剥离一次,最后会剩下一个反斜线符号接受匹配,偶的神呐!

  7、判断某个字段是否存在的SQL,在每个语言中都可以这样去实现, DESCRIBE 表名 字段名;如果返回数组,则存在该字段,否则不存在该字段,可用于避免直接调用而产生的意外错误。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,077
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,400
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,812
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,894