【「mysql优化专题」90%程序员没听过的存储过程和存储函数教学(7)】教程文章相关的互联网学习教程文章

MySQL优化案例系列-mysql分页优化

通常,我们会采用ORDER BY LIMIT start, offset 的方式来进行分页查询。例如下面这个SQL:SELECT * FROM `t1` WHERE ftype=1 ORDER BY id DESC LIMIT 100, 10;或者像下面这个不带任何条件的分页SQL:SELECT * FROM `t1` ORDER BY id DESC LIMIT 100, 10;一般而言,分页SQL的耗时随着 start 值的增加而急剧增加,我们来看下面这2个不同起始值的分页SQL执行耗时:yejr@imysql.com> SELECT * FROM `t1` WHERE ftype=1 ORDER BY id DES...

MySql的优化步骤介绍(推荐)【图】

MySql优化的一般步骤: 1.通过show status 命令了解各种sql的执行效率 SHOW STATUS提供msyql服务器的状态信息 一般情况下,我们只需要了解以”Com”开头的指令 show session status like ‘Com%:显示当前的连接的统计结果 show global status like ‘Com% :显示自数据库上次启动至今的统计结果 注:默认是session级别的 其中Com_XXX表示XXX语句所执行的次数。重点注意:Com_select,Com_insert,Com_update,Com_delete通过这几个参...

MySQL优化GROUPBY(松散索引扫描与紧凑索引扫描)

满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有)。在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建临时表。 为GROUP BY使用索引的最重要的前提条件是所有GROUP BY列引用同一索引的属性,并且索引按顺序保存其关键字。是否用索引访问来代替临时表的使用还取决于在查询中使用了哪部分索引、为该部分指定的条件,...

MySQL优化之分区表【图】

当数据库数据量涨到一定数量时,性能就成为我们不能不关注的问题,如何优化呢? 常用的方式不外乎那么几种:1、分表,即把一个很大的表达数据分到几个表中,这样每个表数据都不多。优点:提高并发量,减小锁的粒度缺点:代码维护成本高,相关sql都需要改动2、分区,所有的数据还在一个表中,但物理存储数据根据一定的规则存放在不同的文件中,文件也可以放到另外磁盘上优点:代码维护量小,基本不用改动,提高IO吞吐量缺点:表的并...

MySQLMyISAM优化设置点滴

最近在配置mysql服务器需要用到的一些设置,经过测试发现比较不错的配置方案,亮点在最后啊 先说一点问题: Mysql中的InnoDB和MyISAM是在使用MySQL中最常用的两个表类型,各有优缺点.两种类型最主要的差别就是 InnoDB 支持事务处理与外键和行级锁.而MyISAM不支持.所以Myisam往往就容易被人认为只适合在小项目中使用。但是从数据库需求角度讲,要求99.9%的稳定性,方便的扩展性和高可用性来说的话,那MyISAM绝对应该是首选。MyISAM类...

如何进行mysql的优化【图】

1,这个比较简单:在phpmyadmin中有提供2.先设计表的时候考虑选择什么样的存储引擎,myisam不支持事务,但查询速度快,不过现在一般采用的都是InnoDB,能符合95%的项目需求。具体的你可以看看两者的区别。 3.要避免全表查询的操作,这个网上有资料。 4.在where和order by的字段上面建索引,当然索引不是多就好,会使insert和update速度变慢 5,尽量不要采用null值,因为这样搜索引擎会花费大量的时间在这里,而且存储上也有区别,...

探究MySQL优化器对索引和JOIN顺序的选择

本文通过一个案例来看看MySQL优化器如何选择索引和JOIN顺序。表结构和数据准备参考本文最后部分"测试环境"。这里主要介绍MySQL优化器的主要执行流程,而不是介绍一个优化器的各个组件(这是另一个话题)。 我们知道,MySQL优化器只有两个自由度:顺序选择;单表访问方式;这里将详细剖析下面的SQL,看看MySQL优化器如何做出每一步的选择。explain select * fromemployee as A,department as B whereA.LastName = zhouand B.Depart...

通过MySQL优化Discuz!的热帖翻页的技巧

写在前面:discuz!作为首屈一指的社区系统,为广大站长提供了一站式网站解决方案,而且是开源的(虽然部分代码是加密的),它为这个垂直领域的行业发展作出了巨大贡献。尽管如此,discuz!系统源码中,还是或多或少有些坑。其中最著名的就是默认采用MyISAM引擎,以及基于MyISAM引擎的抢楼功能,session表采用memory引擎等,可以参考后面几篇历史文章。本次我们要说说discuz!在应对热们帖子翻页逻辑功能中的另一个问题。 在我们的环境...

mysql优化limit查询语句的5个方法

mysql的分页比较简单,只需要limit offset,length就可以获取数据了,但是当offset和length比较大的时候,mysql明显性能下降 1.子查询优化法 先找出第一条数据,然后大于等于这条数据的id就是要获取的数据 缺点:数据必须是连续的,可以说不能有where条件,where条件会筛选数据,导致数据失去连续性,具体方法请看下面的查询实例:代码如下: mysql> set profiling=1; Query OK, 0 rows affected (0.00 sec) mysql> select count(*)...

MySQL优化GROUPBY方案

执行GROUP BY子句的最一般的方法:先扫描整个表,然后创建一个新的临时表,表中每个组的所有行应为连续的,最后使用该临时表来找到组并应用聚集函数(如果有聚集函数)。在某些情况中,MySQL通过访问索引就可以得到结果,而不用创建临时表。此类查询的 EXPLAIN 输出显示 Extra列的值为 Using index for group-by。 一。 松散索引扫描 1.满足条件 查询针对一个表。 GROUP BY 使用索引的最左前缀。 只可以使用MIN()和MAX()聚集函数...

mysql优化连接数防止访问量过高的方法

很多开发人员都会遇见”MySQL: ERROR 1040: Too many connections”的异常情况,造成这种情况的一种原因是访问量过高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力;另一种原因就是MySQL配置文件中max_connections值过小。 首先,我们来查看mysql的最大连接数:mysql> show variables like %max_connections%; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connect...

MySQL优化之对RAND()的优化方法

众所周知,在MySQL中,如果直接 ORDER BY RAND() 的话,效率非常差,因为会多次执行。事实上,如果等值查询也是用 RAND() 的话也如此,我们先来看看下面这几个SQL的不同执行计划和执行耗时。 首先,看下建表DDL,这是一个没有显式自增主键的InnoDB表:代码如下: [yejr@imysql]> show create table t_innodb_random\G *************************** 1. row *************************** Table: t_innodb_random Create Table: CREATE...

MySQL优化之如何了解SQL的执行频率

show [session|global] status 可以根据需要加上参数“ session ”或者“ global ”来显示 session 级(当前连接)的统计结果和 global 级(自数据库上次启动至今)的统计结果。如果不写,默认使用参数是“ session ”。 Com_xxx 表示每个 xxx 语句执行的次数,我们通常比较关心的是以下几个统计参数 : ?Com_select :执行 select 操作的次数,一次查询只累加 1 。 ?Com_insert :执行 INSERT 操作的次数,对于批量插入的 I...

MySQL优化之如何查找SQL效率低的原因

查询到效率低的 SQL 语句 后,可以通过 EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序,比如我们想计算 2006 年所有公司的销售额,需要关联 sales 表和 company 表,并且对 profit 字段做求和( sum )操作,相应 SQL 的执行计划如下: mysql> explain select sum(profit) from sales a,company b where a.company_id = b.id and a.year = 2006\G; *********...

MySQL优化之表结构优化的5大建议(数据类型选择讲的很好)

殊不知,在N年前被奉为“圣经”的数据库设计3范式早就已经不完全适用了。这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用。 由于MySQL数据库是基于行(Row)存储的数据库,而数据库操作 IO 的时候是以 page(block)的方式,也就是说,如果我们每条记录所占用的空间量减小,就会使每个page中可存放的数据行数增大,那么每次 IO 可访问的行数也就增多了。反过来说,处理相同行数的数据,需要访问的 page...