Browsing the archives for the mysql优化 tag

MySQL之Handler_read_*

in mysql

在MySQL里,我们一般使用SHOW STATUS查询服务器状态,语法一般来说如下: SHOW [GLOBAL | SESSION] STATUS [LIKE 'pattern' | WHERE expr] 执行命令后会看到很多内容,其中有一部分是Handler_read_*,它们显示了数据库处理SELECT查询语句的状态,对于调试SQL语句有很大意 义,可惜实际很多人并不理解它们的实际意义,本文简单介绍一下:

1 Comment

根据status信息对MySQL服务器进行优化

in mysql

网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的 情况进行配置优化,好的做法是MySQL服务器稳定运行了一段时间后运行,根据服务器的”状态”进行优化。 mysql> show global status; 可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句: mysql> show variables; 一、慢查询 mysql> show variables like ‘%slow%’; +——————+——-+ | Variable_name    | Value | +——————+——-+ | log_slow_queries | ON    | | slow_launch_time | 2     | +——————+——-+ mysql> show global status like ‘%slow%’; +———————+——-+ | Variable_name       | Value | +———————+——-+ | Slow_launch_threads | 0     | | Slow_queries        | [...]

0 Comments

mysql优化的重要参数 key_buffer_size table_cache 分享

in mysql

MySQL服务器端的参数有很多,但是对于大多数初学者来说,众多的参数往往使得我们不知所措,但是哪些参数是需要我们调整的,哪些对服务器的性能影响最大呢?对于使用Myisam存储引擎来说,主要有key_buffer_size和table_cache两个参数。对于InnoDB引擎来说主要还是以innodb_开始的参数,也很好辨认。 查看MySQL参数,可以使用show variables和show status命令查看,前者查看服务器静态参数,即在数据库启动后不会动态更改的值,比如缓冲区、字符集等。后者查看服务器的动态运行状态信息,即数据库运行期间动态变化的信息,比如锁,当前连接数等。

0 Comments

启用Xdebug使用WinCacheGrind分析脚本执行时间

in mysql

使用Xdebug调试和优化PHP程序系列教程之WinCacheGrind,教你如何利用Xdebug 配合WinCacheGrind工具来检测PHP代码的效率以及分析PHP代码。

有时候代码没有明显的编写错误,没有显示任何错误信息(如 error、warning、notice等),但是这不表明代码就是正确无误的。有时候可能某段代码执行时间过长,占用内存过多以致于影响整个系统的效 率,我们没有办法直接看出来是哪部份代码出了问题。这时候我们希望把代码的每个阶段的运行情况都监控起来,写到日志文件中去,运行一段时间后再进行分析, 找到问题所在。

回忆一下,之前我们编辑php.ini文件

0 Comments

mysql优化数据库对象

in mysql

12.1优化表的数据类型

表需要使用何种数据类型,是需要根据应用来判断的。虽然应用设计的时候需要考虑字段的长度留有一定的冗余,但是不推荐让很多字段都留有大量的冗余,这样即浪费存储也浪费内存。

我们可以使用PROCEDUREANALYSE()对当前已有应用的表类型的判断,该函数可以对数据表中的列的数据类型提出优化建议,可以根据应用的实际情况酌情考虑是否实施优化。

语法:

SELECT * FROM tbl_name PROCEDURE ANALYSE();

SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256);

0 Comments

mysql的默认查询优先还是更新(iinnsseerrtt、uuppddaattee、ddeelleettee)优先关系

in mysql

MySQL还允许改变语句调度的优先级,它可以使来自多个客户端的查询更好地协作,这样单个客户端就不会由于锁定而等待很长时间。改变优先级还可以确保特定类型的查询被处理得更快。

我们首先应该确定应用的类型,判断应用是以查询为主还是以更新为主的,是确保查询效率还是确保更新的效率,决定是查询优先还是更新优先。

下面我们提到的改变调度策略的方法主要是针对Myisam存储引擎的,对于Innodb存储引擎,语句的执行是由获得行锁的顺序决定的。

MySQL的默认的调度策略可用总结如下:

1. 写入操作优先于读取操作。

2. 对某张数据表的写入操作某一时刻只能发生一次,写入请求按照它们到达的次序来处理。

3. 对某张数据表的多个读取操作可以同时地进行。

0 Comments

用mysql中的join来优化查询

in mysql

Mysql4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代。
连接(JOIN)..之所以更有效率一些,是因为MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。

0 Comments

在mysql中对order by的字段进行优化

in mysql

在某些情况中,MySQL可以使用一个索引来满足ORDERBY子句,而不需要额外的排序。where条件和orderby使用相同的索引,并且orderby的顺序和索引顺序相同, 并且orderby的字段都是升序或者都是降序。

例如:下列sql可以使用索引。

SELECT * FROM t1 ORDER BY key_part1,key_part2,…;

SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC,key_part2 DESC;

SELECT * FROM t1 ORDER BY key_part1 DESC,key_part2 DESC;

0 Comments

mysql优化一般步聚(教程)

in mysql

1.1优化SQL的一般步骤

11.1.1 通过show status和应用特点了解各种SQL的执行频率

通过SHOWSTATUS可以提供服务器状态信息,也可以使用mysqladminextended- status命令获得。SHOWSTATUS可以根据需要显示session级别的统计结果和global 级别的统计结果。

以下几个参数对Myisam和Innodb存储引擎都计数:

1. Com_select 执行select操作的次数,一次查询只累加1;

2. Com_insert执行insert操作的次数,对于批量插入的insert操作,只累加一次;

3. Com_update执行update操作的次数;

4. Com_delete 执行delete操作的次数;

0 Comments

MySQL分表优化试验

in mysql

我们的项目中有好多不等于的情况。今天写这篇文章简单的分析一下怎么个优化法。
这里的分表逻辑是根据t_group表的user_name组的个数来分的。
因为这种情况单独user_name字段上的索引就属于烂索引。起不了啥名明显的效果。

0 Comments