Mysql优化一方面是找出系统的瓶颈,提高mysql数据库的整体性能,另一方面需要合理的结构设计和参数的调整,以提高用户的操作响应速度,同时还要尽可能节省系统资源,以便系统可以提供更大负荷的服务。
原则是减少系统瓶颈,减少资源占用,增加系统反应速度。比如提高I/O的读写速度,通过优化操作系统调度策略,提高mysql在高负荷情况下的负载能力,优化表结构,索引,查询语句等使查询响应更快。
mysql有一些查询数据库性能的参数,show status
show connections //连接服务器的次数,
show update //mysql服务器的上线时间
show slow_queries //慢查询的次数
show com_select //查询操作的次数
show com_insert //插入操作的次数
show com_update //更新搞作的次数
show com_delete //删除操作的次数
mysql中有一个专门负责优化select语句的优化器模块,该优化器模块就是Query Optimizer,
一般的检查mysql时候我习惯用explan和profiling
insert语句优化:
1.插入很多行数据到mysql,如果是一次多个值,可以使用下边格式,将大大缩短客户端与数据库服务器之间的连接和关闭。
insert into table values (id,name),(id,name2);
当从一个文件装载一个表时,使用load data infile加载数据往往比使用很多insert语句效率至少提高20倍
2.对于MyISAM类型的表,如果不同客户端插入很多行,可以通过使用insert delayed语句提升速度,该操作向服务器提交数据后服务器会返回OK给客户端。这并不是将数据立即插入到列表,而是存储在内存里等待排队,直到当mysql服务器有空闲时再插入,此时的数据没有真正写入磁盘,这样的好处是提高插入数据的速度,不好的地方在于如果系统奔溃你就没有办法找到丢失的数据了。
3.通常可以锁定表以加快插入数据,
lock tables test write
insert into test values(1,'22',2,'22' );
unlock tables;
如果不加锁定表,每一次执行insert语句完成后,索引缓存区都会被写到磁盘上,而加入锁定后索引缓存区仅被写到磁盘上一次。
4.影响插入速度的主要是索引,唯一性校验,一次插入记录条数等我们可以分别进行优化。
a.禁用索引
对非空表插入记录时,mysql会根据表的索引对插入记录建立索引,如果插入大量数据,建立索引会降低插入记录的速度,所以在插入前禁用索引,插入后开启索引
alter table test distable keys;
//插入数据
alter table test enable keys;
b.禁用唯一性检查
为一些校验会降低插入的速度,为了降低这种情况的查询速度,可在插入记录之前禁用唯一性检查等到记录插入后开启
set unique_checks=0;
set unique_checks=1;
load data infile '/home/mysql/data.txt' into table test;
set unique_checks=0;//不校验唯一性
load data infile '/home/mysql/data.txt' into table test;
c.使用批量插入
就如上边一个insert多个数据
d.使用load命令批量导入
alert table test disable keys;
load data infile ‘/home/mysql/data.txt’ into table test;
alert table test enable keys;
上边是使用MyISAM引擎的方法
对应Innodb使用
a,禁止唯一检查set unique_checks=0
b,禁止外键检查set foreign_key_checks=0
c,禁止自动提交set autocommit=0
优化ORDER BY语句
1,通常可以采用索引来对order by语句进行优化。order by+limit;where +order by+limit
select id,name from test order by name limit 0,10
select id,name from test where name='Janle' order by name limit 0,10;
通常不要对where和order by使用表达式或者函数,例如
select * from test order by year(birthday) limit 0,20;
以下几种情况是不应该使用索引:
1》order by的字段混合使用asc和desc,如
select * from test order by a asc,b desc ;
2》where子句使用的字段和order by不一致如:
select * from test where b=1 order by a;
3》对不同的关键字使用order by排序如:
select * from test order by a;
2.使用group by 语句时,mysql会对符合的结果自动排序,通过扫描临时表并创建一个临时表,表中每个组的所有行为连续的。然后使用临时表来找到组并应用累积行数。在某些情况下,mysql可以通过索引访问而不用临时表。通过指定group by null可以禁止排序,从而节省损耗。
select count(*) from test group by id order by null;
优化嵌套查询
1.子查询虽然方便查询很灵活,但是mysql需要为内层查询语句建立一个临时表,然后外层查询语句从临时表中查询记录。查询完毕后再撤销这些临时表。因此速度会有影响,如果查询的数据量比较大,这种影响会随之增大。可以使用join查询来代替子查询,连接查询不需要建立临时表,速度比子查询快,使用索引的话,性能会更好。从执行计划可看出采用join后连接查询扫描记录有了很大的改善,性能有一定的提高。
优化OR条件
对于使用OR条件语句子查询,如果要使用索引,则OR之间的每个条件列都必须使用到索引,如果没有所以更可以考虑添加索引。
explan select * from test where col=1 and col1=2;//没有使用union
create index index_col on(test.col);
create index index_col1 on(test.col1);
explan select * from test where col=1 and col1=2;//可以看见是做了union操作
添加索引后是对各个字段查询到结果之后再进行union操作
分享到:
相关推荐
### MySQL性能优化与SQL优化方法技巧 #### 一、引言 MySQL作为一款广泛使用的开源关系型数据库管理系统,其性能优化对于确保应用系统的稳定性和高效运行至关重要。通过对MySQL的优化,不仅能提升系统的响应速度,还...
MySQL架构执行与SQL性能优化-MySQL高并发详解课程,课程的目标简单明确,核心就是MySQL的性能优化与高并发。课程内容进行了精华的浓缩,有四大内容主旨,MySQL架构与执行流程,MySQL索引原理详解,MySQL事务原理与...
### MySQL数据库SQL优化 #### 一、SQL优化 在MySQL数据库管理中,SQL查询的性能直接影响到系统的响应时间和资源消耗。通过合理的SQL优化,可以显著提高数据处理速度,降低服务器负载,提升用户体验。 ##### 1.1 ...
SQL语句执行流程是MySQL性能优化的重要方面。SQL(Structured Query Language)是关系型数据库的标准查询语言。当一个SQL语句被提交给数据库服务器时,它将按照一定的流程执行:首先对SQL语句进行语法解析,检查语句...
减少数据访问,返回更少数据,减少交互次数,减少服务器CPU开销,利用更多资源。注意:这个是对《sql性能优化分享》的后期修改与补充。下载这个最新的就下载老的了。别下载重复了!!!
MySQL数据库优化SQL篇PPT课件.pptx 本PPT课件主要讲述了MySQL数据库优化的重要知识点,特别是SQL优化方面的内容。从执行计划、SELECT语句、IN和EXIST语句、LIMIT语句、RAND函数、Order by、Group by、Distinct和...
MySQL性能优化是一个涵盖广泛的主题,涉及多个层面,包括SQL语句优化、索引优化、数据库表结构优化、系统级配置优化以及服务器硬件优化。以下是对这些方面进行详细说明: 1. **SQL语句优化** - **慢查询日志**:...
MySQL的SQL查询性能优化技术是数据库管理中至关重要的一环,对于提升系统效率和用户体验有着显著影响。本篇主要探讨了优化SQL查询的一些基本原则、企业级监控、配置与参数化、数据管理和性能考量等方面。 首先,...
尽管如此,我将基于标题和描述中提供的关键词“Effective MySQL之SQL语句最优化”来构建知识点。 1. SQL语句最优化的概念:在数据库管理中,对SQL语句进行优化是提高数据库性能的关键环节。最优化的SQL语句能够在...
MySQL 性能优化是数据库管理员和开发者最关心的问题之一,如何分析和优化 SQL 查询以提高性能是 MySQL 性能优化的核心技术之一。在本资源中,我们将介绍 MySQL 性能优化的基本概念、cost-based 优化器、查询优化技术...
MySQL性能优化是数据库管理员和开发人员的关键技能,它涉及到如何有效地使用SQL语句、存储过程和函数,以提高数据查询速度和系统整体效率。本手册将深入探讨这些关键领域,帮助你理解并实施最佳实践。 在SQL语句...
MySQL的SQL优化是数据库管理中的重要环节,尤其对于有经验的开发者来说,了解并掌握这一技能可以显著提升数据库性能,减少资源消耗。SQL优化主要涉及查询效率、索引使用、查询语句结构优化等多个方面。 首先,理解...
而在MySQL中,尽管InnoDB实现了行级锁定,其锁机制比Oracle要简单,但在进行SQL优化时,DBA依然需要关注锁相关的性能问题。 最后,在执行层面的细节上,不同数据库系统有着各自独特的要求和限制。例如,在Oracle中...
MySQL性能优化是数据库管理中的重要环节,特别是在处理大量数据时,高效的SQL语句能显著提升系统性能。以下是一些关于SQL语句性能优化的关键知识点: 1. **LIMIT使用**: LIMIT子句常用于限制查询返回的结果数量,...
以下是一些针对MySQL批量SQL插入的性能优化策略: 1. **批量插入数据** - 传统的做法是逐条插入数据,但这种方式会导致大量的SQL语句执行和日志写入,从而降低性能。优化的方式是将多条插入语句合并为一条,如示例...
详细介绍慢查询日志及示例演示,MySQL查询优化器介绍及特定SQL的查询优化等 1.获取有性能问题的SQL的三种方法 2.慢查询日志概述 3.慢查询日志实例 4.实时获取性能问题SQL 5.SQL的解析预处理及生成的执行计划 6.如何...
### MySQL优化之SQL语句与索引优化 #### 数据库设计合理性 在MySQL数据库的优化过程中,合理设计数据库(表)至关重要。一个合理的数据库设计能够有效地提高查询性能、减少数据冗余并确保数据完整性。 - **3NF**...
【标题】:“百度mysql性能优化ppt”所涉及的知识点涵盖了MySQL数据库在性能调优方面的多个重要环节。在MySQL性能优化中,我们关注的核心是提升数据处理速度,减少资源消耗,从而提高系统的整体效率。 【描述】:...
《Effective MySQL之SQL语句最优化》提供了很多可以用于改进数据库和应用程序性能的最佳实践技巧,并对这些技巧做了详细的解释。《Effective MySQL之SQL语句最优化》希望能够通过一步步详细介绍SQL优化的方法,帮助...