分类目录归档:MySQL

使用Anemometer基于pt-query-digest将MySQL慢查询日志可视化

MySQL慢查询日志分析工具不少,比如:

1、mysqldumpslow,MySQL官方提供。

2、mysqlsla,hackmysql.com推出的一款日志分析工具。功能非常强大,数据报表,非常有利于慢查询分析,包括执行频率、数据量和查询消耗等。

虽然都可以满足日常的使用,但是不够直观,并且无法方便开发人员进一步完善SQL语句。

pt-query-digest

是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。

Anemometer

将MySQL慢查询log可视化。

MySQL开启慢查询日志

不同的版本,MySQL开启慢查询日志方式有点不同。可以通过


#show variables like '%slow%'

命令查看都需要配置哪些参数。以5.6版本为例,修改my.cnf的数据库配置文件


slow_query_log = ON
slow_launch_time = 2
slow_query_log_file = /自定义日志目录/mysql-slow.log
log_queries_not_using_indexes = 1 //没有使用到索引的查询也将被记录在日志中

继续阅读

MySQL查询重复记录方法以及简单理解

MySQL查询重复记录方法其实很简单。知道查询重复记录的方法后,自然要了解如何删除重复记录的方法。做下笔记记录下各个操作SQL语句、简单理解和使用过程中遇到的问题。

查询重复记录

SQL语句如下:


select * from table where tableId in (select tableId from table group by tableId having count(tableId) > 1)

原理:用哪些系列作为重复的标准,当这些列重复的个数大于1的情况下,判断此行记录为重复的。

继续阅读

PHP+MySQL实现附近地点查询功能

最近接触一个项目,需要根据经纬度计算附近的点。数据量为20w。

如果通过foreach循环MySQL数据库中经纬度,然后再结算距离,速度和性能都会很慢。学习了网上一个方法,特记录下来:

实现原理

算出当前经纬度周围的矩形的四个点,然后使用经纬度去直接匹配数据库中的记录。

map

红色部分为要求的搜索范围,绿色部分我们能间接得到的结果范围。

继续阅读

MySQL索引概念

唯一索引(UNIQUE):不是为了提高访问速度,而只是为了避免数据出现重复。

常规索引(INDEX):使数据库最大性能方面的提升。在MyISAM中,数据表中数据行保存在数据文件中,索引保存在索引文件中。而InnoDB数据表把数据与索引放在同一个文件中。缺点:多占用磁盘空间、减慢在索引数据列上的插入、删除和修改操作,它们也需要按照索引列上的排序格式执行。

继续阅读

MySQL按照汉字的拼音排序

上次客户问我,用户能否按照拼音排序列出来,当时在数据库客户端软件测试了下,发现不行,就告诉他不可以的。

现在写选择领导签名,想把查询出来的领导按照拼音排序,百度了一下,发现是可以的。汗颜。。。

按照汉字的拼音排序,用的比较多是在人名的排序中,按照姓氏的拼音字母,从A到Z排序;

如果存储姓名的字段采用的是GBK字符集,那就好办了,因为GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字3755个采用拼音排序,二级汉字就不是了,但考虑到人名等都是常用汉字,因此只是针对一级汉字能正确排序也够用了)。直接在查询语句后面 添加 order by name asc; 查询结果按照姓氏的升序排序;

如果存储姓名的字段采用的是 utf8字符集,需要在排序的时候对字段进行转码;对于的代码是  order by convert(name using gbk) asc; 同样,查询的结果也是按照姓氏的升序排序;

自行用来TP写代码,数据库都没用过GBK的了。

MySQL 触发器

触发器:当执行某个事件的时候触发另一个事件的执行。触发的时间分为before和after,分别有以下六种:before insert,before update,before delete和after insert,after update,after delete。

继续阅读