`

Mysql SQL性能优化

阅读更多
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性能优化 SQL优化方法技巧

    MySQL架构执行与SQL性能优化 MySQL高并发详解 MySQL数据库优化训练营四期课程

    MySQL架构执行与SQL性能优化-MySQL高并发详解课程,课程的目标简单明确,核心就是MySQL的性能优化与高并发。课程内容进行了精华的浓缩,有四大内容主旨,MySQL架构与执行流程,MySQL索引原理详解,MySQL事务原理与...

    sql性能优化及实例

    减少数据访问,返回更少数据,减少交互次数,减少服务器CPU开销,利用更多资源。注意:这个是对《sql性能优化分享》的后期修改与补充。下载这个最新的就下载老的了。别下载重复了!!!

    mysql 性能优化 How to Analyze and Tune SQL Queries for Better Perfor

    MySQL 性能优化是数据库管理员和开发者最关心的问题之一,如何分析和优化 SQL 查询以提高性能是 MySQL 性能优化的核心技术之一。在本资源中,我们将介绍 MySQL 性能优化的基本概念、cost-based 优化器、查询优化技术...

    千金良方:MySQL性能优化金字塔法则.docx

    SQL语句执行流程是MySQL性能优化的重要方面。SQL(Structured Query Language)是关系型数据库的标准查询语言。当一个SQL语句被提交给数据库服务器时,它将按照一定的流程执行:首先对SQL语句进行语法解析,检查语句...

    MySQL性能优化中文手册

    MySQL性能优化是数据库管理员和开发人员的关键技能,它涉及到如何有效地使用SQL语句、存储过程和函数,以提高数据查询速度和系统整体效率。本手册将深入探讨这些关键领域,帮助你理解并实施最佳实践。 在SQL语句...

    MySQL的SQL查询性能优化技术.pdf

    MySQL的SQL查询性能优化技术.pdf

    mysql 性能优化与架构设计(word版)

    MySQL性能优化与架构设计是数据库管理员、开发人员和系统管理员关注的重要领域,因为数据库性能直接影响到应用程序的响应速度和整体用户体验。本资料提供了一个全面的视角,深入探讨了如何优化MySQL的性能并进行有效...

    mysql的sql优化

    MySQL的SQL优化是数据库管理中的重要环节,尤其对于有经验的开发者来说,了解并掌握这一技能可以显著提升数据库性能,减少资源消耗。SQL优化主要涉及查询效率、索引使用、查询语句结构优化等多个方面。 首先,理解...

    Effective MySQL之SQL语句最优化

    《Effective MySQL之SQL语句最优化》是由MySQL专家Ronald Bradford撰著,书 中提供了很多可以用于改进数据库和应用程序性能的最佳实践技巧,并对这些技巧 做了详细的解释。本书希望能够通过一步步详细介绍SQL优化...

    mysql性能优化.SQL语句性能优化

    MySQL性能优化是数据库管理中的重要环节,特别是在处理大量数据时,高效的SQL语句能显著提升系统性能。以下是一些关于SQL语句性能优化的关键知识点: 1. **LIMIT使用**: LIMIT子句常用于限制查询返回的结果数量,...

    MySQL批量SQL插入各种性能优化.docx

    以下是一些针对MySQL批量SQL插入的性能优化策略: 1. **批量插入数据** - 传统的做法是逐条插入数据,但这种方式会导致大量的SQL语句执行和日志写入,从而降低性能。优化的方式是将多条插入语句合并为一条,如示例...

    MySQL SQL查询优化最佳实践

    详细介绍慢查询日志及示例演示,MySQL查询优化器介绍及特定SQL的查询优化等 1.获取有性能问题的SQL的三种方法 2.慢查询日志概述 3.慢查询日志实例 4.实时获取性能问题SQL 5.SQL的解析预处理及生成的执行计划 6.如何...

    百度mysql性能优化ppt

    【标题】:“百度mysql性能优化ppt”所涉及的知识点涵盖了MySQL数据库在性能调优方面的多个重要环节。在MySQL性能优化中,我们关注的核心是提升数据处理速度,减少资源消耗,从而提高系统的整体效率。 【描述】:...

    Mysql性能优化教程

    MySQL性能优化是数据库管理中的关键环节,特别是在高并发场景下,优化MySQL的性能对于提升系统整体效率至关重要。本教程将深入探讨MySQL性能优化的各个方面,帮助你理解并实践有效的优化策略。 首先,我们来了解**...

    sql查询优化(提高MySQL数据库查询效率的几个技巧)

    SQL 查询优化(提高 MySQL 数据库查询效率的几个技巧) 在 MySQL 数据库中,查询优化是一个非常重要的方面。在实际应用中,高效的查询可以提高整个系统的性能和响应速度。下面我们将介绍几个提高 MySQL 数据库查询...

    SQL性能优化PPT.rar

    在SQL性能优化领域,理解和掌握相关知识是提升数据库效率的关键。这份"SQL性能优化PPT.rar"压缩包包含了三部分的PPT,旨在提供全面的性能优化策略和实践案例,帮助我们深入理解如何通过有效的方法改善SQL查询的速度...

    MySql5.6性能优化1

    MySQL 5.6性能优化是数据库管理中至关重要的一环,其目标在于提升系统运行效率,减少资源消耗,增强系统的响应速度。优化不仅涉及查询层面,还包括数据库结构的优化以及MySQL服务器本身的调整。以下将详细讨论这些...

    MySQL性能优化.xmind

    mysql性能优化的总结,从各个方面对sql的优化进行了总结,感觉是很好的性能优化的摘要总结,所以上传共享出来,绝对的硬货。绿色版,解压直接用,方便程序猿

    Mysql 海量数据性能优化.rar

    MySQL是世界上最受欢迎的开源关系型数据库之一,尤其在处理海量数据时,其性能优化显得尤为重要。本资料"海量数据性能优化.rar"主要聚焦于如何在大数据环境下提升MySQL的运行效率和响应速度,确保系统的稳定性和可...

Global site tag (gtag.js) - Google Analytics