`
wangym
  • 浏览: 124581 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL优化技巧

阅读更多

* 不断完善中

 

GROUP BY默认会对字段排序

 

explain select * from tbl_name group by col;

Explain的结果是:Extra: Using temporary; Using filesort

若业务逻辑上无需排序,则加上order by null,这时explain的结果就只有:Using temporary

少了Using filesort会快很多哦!

 

=========================

 

大批量数据插入优化方法

 

最高效的大批量插入数据的方法:

load data infile ‘/path/to/file’ into table tbl_name;

如果没有办法先生成文本文件或者不想生成文本文件,可以一次插入多行:

insert into tbl_name values (1,2,3),(4,5,6),(7,8,9)…

一条sql语句的最大长度是有限制的。若还不想这样,可尝试MySQL的prepare,应该都会比硬生生的逐条插入要快许多。
如果数据表有索引,建议先暂时禁用索引:

alter table tbl_name disable keys;
插入完毕之后再激活索引:

alter table tbl_name enable keys;
对MyISAM表尤其有用。避免每插入一条记录系统更新一下索引。

 

警示:传统开发中,所实现的批量插入方法,都是通过循环单条插入方法来完成的,这就造成了性能问题。

 

=========================

 

最快复制表结构和/或数据的方法

 

create table clone_tbl select * from tbl_name limit 0;
只会复制表结构,索引不会复制,如果还要复制数据,把limit 0去掉即可。

 

=========================

 

加单/双引号查询 整型和字符型 字段时的索引作用

 

模拟环境,表:person,字段:id(int 主键 自增) name(varchar) age(int 索引)。

以下三句均能查出结果并使用age索引

explain select * from person where age="27"

explain select * from person where age='27';

explain select * from person where age=27;

若将age改为varchar,仍然执行以上三句SQL,其中最后一句,虽能查出结果但未使用上age索引。

总结:在字符串类型的字段上查询,必须加单或双引号才能正确使用索引,但在整型字段上加或不加单双引号无差别。

 

=========================

 

对大长度字符串类型的字段建前缀索引

 

有时候我们的表中有varchar(255)这样的字段,而且我们还要对该字段建索引,一般没有必要对整个字段建索引,建立前8~12个字符的索引应该就够了,很少有连续8~12个字符都相等的字段。为什么?更短的索引意味索引更小、占用CPU时间更少、占用内存更少、占用IO更少和很更好的性能。

建立前缀索引方法:create index col on tbl_name(col(index_length));

注:比如实际查询的值超出index_length时,并非无法查询正确结果,也并非无法使用该索引,只是会扫描更多的行数。

 

=========================

 

重构分页优化思想

 

常规分页大页码SQL分析:

explain SELECT * FROM tbl_name ORDER BY col DESC LIMIT 10000,20

... rows: 10020 ...

LIMIT 10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行。

所以这类分页算法,在大并发应用中是相当消耗性能的,因为翻页页码大时,总是要扫描这么多行。

 

优化思想:

给分页提供线索,尽量减小LIMIT m,n中m的值,比如:

SELECT * FROM tbl_name WHERE col > 9527 ORDER BY col ASC LIMIT 20,20;

SELECT * FROM tbl_name WHERE col < 9500 ORDER BY col DESC LIMIT 40,20;

其中9527和9500是当前页的最大和最小值(线索),LIMIT m,n是相较于当前页的偏移量值;

注意SQL语句里面的ASC和DESC,如果是ASC取出来的结果,显示的时候记得倒置一下。

 

 

分享到:
评论
1 楼 teder 2010-08-17  
@GROUP BY默认会对字段排序
试了下,如果where和group by 中存了一个索引字段,就不会出现Using filesort。只有当不运用索引,全表扫描时才会出现Using filesort。

相关推荐

    Mysql 优化技巧总结(自己整理)

    ### MySQL优化技巧总结 #### 一、MySQL慢查询日志(Slow Query Log)与mysqldumpslow工具 **慢查询日志**是MySQL提供的一种非常实用的功能,它能够帮助我们记录并分析那些执行时间较长的SQL语句,进而找出性能瓶颈并...

    mysql优化技巧

    ### MySQL优化技巧详解 #### 一、选择正确的存储引擎 MySQL提供了多种存储引擎,每种引擎都有其特点和适用场景。对于不同的业务需求,选择合适的存储引擎至关重要。 1. **InnoDB**: - **支持事务**:InnoDB是...

    MySQL优化技巧大全.pdf

    "MySQL优化技巧大全.pdf" MySQL优化技巧大全.pdf是一份关于MySQL数据库优化的详细指南,涵盖了多种MySQL数据库优化技巧和方法。以下是对该文件的总结和分析: 1. 根据当前时间计算年龄 MySQL提供了多种方式来计算...

    MySQL优化技巧.rar

    这份"MySQL优化技巧"的文档很可能会涵盖多个方面,包括查询优化、索引优化、存储引擎选择、架构设计以及服务器配置等方面。下面将详细介绍这些关键领域的优化策略。 1. **查询优化**:SQL查询是数据库性能的关键...

    MySQL调优讨论:原理 优化 技巧

    二、MySQL优化策略 1. **查询重构**:通过分析慢查询日志,找出低效查询并进行重构,比如减少子查询,合并多条SQL,使用EXPLAIN分析查询执行计划。 2. **硬件升级**:增加内存容量,使用更快的SSD硬盘,或者分布式...

    MySQL优化技巧大揭秘实战课

    MySQL性能提升一直是DBA工程师们绕不...从小型数据库集群到大型数据中心,MySQL性能优化都贯穿整个架构设计和后期运维,本次课程精华提炼了20大MySQL性能优化技巧,让同学们可以理由闲暇琐碎时间掌握更多优化实战技巧。

    提升MYSQL查询效率的10个SQL语句优化技巧.doc

    "MYSQL 查询效率优化技巧" 在数据库应用中,MySQL 查询效率对程序的执行速度有很大的影响。有效的处理优化数据库是非常有用的,尤其是大量数据需要处理的时候。以下是十个 SQL 语句优化技巧来提升 MYSQL 查询效率:...

    MySQL优化技巧大揭秘实战课视频.zip

    1-1 SQL优化基本介绍 1-2 七个查询命令特征 1-3 查询语句执行特征 1-4 需要优化的查询命令 2-1 索引基本介绍 2-2 索引分类 2-3 聚簇索引与非聚簇索引区别 2-4 主键索引与唯一性索引 2-5 单字段索引与符合索引区别 2-...

    mysql配置和优化

    #### 四、MySQL优化技巧 - **内存分配**:合理配置MySQL的缓存和缓冲区大小,如`key_buffer_size`、`innodb_buffer_pool_size`等,可以显著提高数据库性能。 - **查询优化**:通过对SQL查询进行优化,减少不必要的...

    101个MySQL优化技巧和提示

    以下是一些关键的MySQL优化技巧: 1. **硬件优化**: - **内存**:确保有足够的物理内存来缓存InnoDB数据,减少磁盘I/O,提升性能。 - **RAID配置**:选择高性能的RAID配置如RAID10,避免使用RAID5,因为RAID5的...

    从 0 开始带你成为MySQL实战优化高手.txt

    综上所述,《从0开始带你成为MySQL实战优化高手》不仅覆盖了MySQL的基础知识和核心技能,还提供了丰富的实战案例分析,是一本非常适合初学者和有一定经验的技术人员深入学习MySQL优化技巧的宝贵资料。通过系统地学习...

    mysql优化笔记+资料

    这些笔记涵盖了MySQL优化的主要方面,包括查询优化、SQL编写技巧、数据库设计、存储引擎选择、服务器配置、硬件升级、定期维护以及使用各种工具进行监控和调优。通过这些方法,你可以有效地提升MySQL数据库的运行...

    MySql高性能优化.md

    ### MySQL 高性能优化策略详解 #### 一、表的优化 ##### 1. 定长与变长分离 在数据库设计中,合理地将定长字段与变长字段分开存储,可以有效提升数据处理效率。例如,在一张表中,`id` 类型为 `INT`,占用 4 个...

    MySQL优化原理

    接下来,我们将探讨一些常用的MySQL优化技巧,并解释其背后的原理。 ##### 1. 不使用SELECT * - **原因**:使用`SELECT *`会返回表中的所有列,这不仅增加了网络传输的负担,还可能增加内存使用量。 - **优化策略*...

    mysql优化.doc

    理解并应用这些MySQL优化技巧,能够有效提高系统的整体性能,降低响应时间,提升用户体验,尤其在处理大量数据的应用场景中显得尤为重要。在设计数据库时,应充分考虑未来数据的增长,以确保系统具有良好的可扩展性...

    史上最全面-最实用的MySQL优化方法培训材料

    本文将深入探讨这些方面的优化方法,帮助你掌握全面而实用的MySQL优化技巧。 首先,定位问题是优化的第一步。当数据库运行缓慢时,我们需要通过系统层的检查来确定问题所在。例如,使用`top`命令可以查看MySQL服务...

    MYSQL优化-一篇很好的优化文章

    21. MYSQL扩展/优化-提供更快的速度 22. MYSQL何时使用索引 23. MYSQL何时不使用索引 24. 学会使用EXPLAIN 25. 学会使用SHOW PROCESSLIST 26. 如何知晓MYSQL解决一条查询 27. MYSQL非常不错 28. MYSQL应避免...

    燕十八 封笔之作——MySQL优化.zip

    【燕十八 封笔之作——MySQL优化】 ...燕十八的这部作品集,无疑是MySQL优化领域的宝贵资源,它涵盖了从基础到进阶的全方位知识,通过学习,读者将能够系统地掌握MySQL优化技巧,提升数据库系统的整体性能。

Global site tag (gtag.js) - Google Analytics