这个我一年多前写的。以后有时间共享一下新的优化。
毕竟当时的认识还是非常浅的。

如果大家有异议,可以在后面补充。我会随时更新的。

现在大概列出如下:(望各位补充)
1.数据库的设计
尽量把数据库设计的更小的占磁盘空间.
1).尽可能使用更小的整数类型.(mediumint就比int更合适).
2).尽可能的定义字段为not null,除非这个字段需要null.(这个规则只适合字段为KEY的情形)
3).如果没有用到变长字段的话比如varchar,那就采用固定大小的纪录格式比如char.(CHAR 总是比VARCHR快)
4).表的主索引应该尽可能的短.这样的话每条纪录都有名字标志且更高效.
5).只创建确实需要的索引。索引有利于检索记录,但是不利于快速保存记录。如果总是要在表的组合字段上做搜索,那么就在这些字段上创建索引。索引的第一部分必须是最常使用的字段.如果总是需要用到很多字段,首先就应该多复制这些字段,使索引更好的压缩。
(这条只适合MYISAM引擎的表,对于INNODB则在保存记录的时候关系不大,因为INNODB是以事务为基础的,如果想快速保存记录的话,特别是大批量的导入记录的时候)
6).所有数据都得在保存到数据库前进行处理。
7).所有字段都得有默认值。
8).在某些情况下,把一个频繁扫描的表分成两个速度会快好多。在对动态格式表扫描以取得相关记录时,它可能使用更小的静态格式表的情况下更是如此。
(具体的表现为:MYISAM表的MERGE类型,以及MYISAM和INNODB通用的分区,详情见手册)
9).不会用到外键约束的地方尽量不要使用外键。
2.系统的用途
1).及时的关闭对MYSQL的连接。
2).explain 复杂的SQL语句。(这样能确定你的SELECT 语句怎么优化最佳)
3).如果两个关联表要做比较话,做比较的字段必须类型和长度都一致.(在数据庞大的时候建立INDEX)
4).LIMIT语句尽量要跟order by或者 distinct.这样可以避免做一次full table scan.
5).如果想要清空表的所有纪录,建议用truncate table tablename而不是delete from tablename.
不过有一个问题,truncate 不会在事务处理中回滚。因为她要调用create table 语句。
(Truncate Table 语句先删除表然后再重建,这个是属于文件界别的,所以自然快N多)
实测例子:
song2为INNODB表。
mysql> select count(1) from song2;
+----------+
| count(1) |
+----------+
|   500000 |
+----------+
1 row in set (0.91 sec)

mysql> delete from song2;
Query OK, 500000 rows affected (15.70 sec)
mysql> truncate table song2;
Query OK, 502238 rows affected (0.17 sec)

mysql>
{
这一点手册上有详细解释:

13.2.9. TRUNCATE语法

TRUNCATE [TABLE] tbl_name
TRUNCATE TABLE用于完全清空一个表。从逻辑上说,该语句与用于删除所有行的DELETE语句等同,但是在有些情况下,两者在使用上有所不同。
对于InnoDB表,如果有需要引用表的外键限制,则TRUNCATE TABLE被映射到DELETE上;否则使用快速删减(取消和重新创建表)。使用TRUNCATE TABLE重新设置AUTO_INCREMENT计数器,设置时不考虑是否有外键限制。
对于其它存储引擎,在MySQL 5.1中,TRUNCATE TABLE与DELETE FROM有以下几处不同:
·         删减操作会取消并重新创建表,这比一行一行的删除行要快很多。
·         删减操作不能保证对事务是安全的;在进行事务处理和表锁定的过程中尝试进行删减,会发生错误。
·         被删除的行的数目没有被返回。
·         只要表定义文件tbl_name.frm是合法的,则可以使用TRUNCATE TABLE把表重新创建为一个空表,即使数据或索引文件已经被破坏。
·         表管理程序不记得最后被使用的AUTO_INCREMENT值,但是会从头开始计数。即使对于MyISAM和InnoDB也是如此。MyISAM和InnoDB通常不再次使用序列值。
·         当被用于带分区的表时,TRUNCATE TABLE会保留分区;即,数据和索引文件被取消并重新创建,同时分区定义(.par)文件不受影响。
TRUNCATE TABLE是在MySQL中采用的一个Oracle SQL扩展。

}
6).能使用STORE PROCEDURE 或者 USER FUNCTION的时候.(ROUTINE总是减少了服务器端的开销)
7).在一条insert语句中采用多重纪录插入格式.而且使用load data infile来导入大量数据,这比单纯的indert快好多.(在MYSQL中具体表现为:INSERT INTO TABLEQ VALUES (),(),...();)
(还有就是在MYISAM表中插入大量记录的时候先禁用到KEYS后面再建立KEYS,具体表现语句:
 ALTER TABLE TABLE1 DISABLE KEYS;ALTER TABLE TABLE1 ENABLE KEYS;
而对于INNNODB 表在插入前先 set autocommit=0;完了后:set autocommit=1;这样效率比较高。)
8).经常OPTIMIZE TABLE 来整理碎片.
9).还有就是date 类型的数据如果频繁要做比较的话尽量保存在unsigned int 类型比较快。
3.系统的瓶颈
1).磁盘搜索.
并行搜索,把数据分开存放到多个磁盘中,这样能加快搜索时间.
2).磁盘读写(IO)
可以从多个媒介中并行的读取数据。
3).CPU周期
数据存放在主内存中.这样就得增加CPU的个数来处理这些数据。
4).内存带宽
当CPU要将更多的数据存放到CPU的缓存中来的话,内存的带宽就成了瓶颈.
====

Another article more about tuning details:

[url]http://www.informit.com/articles/article.aspx?p=29406&seqNum=1[/url]

总结MYSQL的优化相关推荐

  1. mysql字段优化_MySQL优化(1):字段的设计

    Web项目中,当Java或者Go等语言速度提升到瓶颈的时候,我们需要关心MySQL的优化 可以优化的方面有很多:设计表.负载均衡.读写分离.SQL语句优化等 (1)IP地址设计 例如我们需要存储IP地 ...

  2. mysql语句生成工具_强烈推荐一款MySQL语句优化辅助工具,值得收藏

    概述 优化SQL,是DBA常见的工作之一.如何高效.快速地优化一条语句,是每个DBA经常要面对的一个问题.对于一名DBA来说,掌握一门语言配合自己的工作是非常必要的.相对于shell的简单.perl的 ...

  3. 【数据库优化专题】MySQL视图优化(一)

    本期数据库优化专题分享,为大家带来的是DBA+社群MySQL领域原创专家--李海翔所著的MySQL视图优化系列文章.以下是第一部分的内容,未完部分敬请关注后续更新. 专家简介 李海翔 网名:那海蓝蓝 ...

  4. MySQL全面优化,速度飞起来

    在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已. 图-MySQL查询过程 一.优化的哲学 ...

  5. Mysql性能优化方案

    2019独角兽企业重金招聘Python工程师标准>>> 内容简介:这是一篇关于mysql 性能优化的文章.网上有不少mysql 性能优化方案,不过,mysql的优化同sql serv ...

  6. mysql半连接_mysql表的半连接,反连接导致的mysql性能优化剖析

    [导读] 关于Oracle的半连接,反连接,我一直认为这是一个能讲很长时间的话题,所以在我的新书<Oracle DBA工作笔记>中讲性能优化的时候,我花... 关于Oracle的半连接,反 ...

  7. MySQL性能优化、故障排查及最佳实践秘籍,阿里云数据库专家玄惭的“武功”全记录...

    为什么80%的码农都做不了架构师?>>>    文章简介 玄惭,真名罗龙九,阿里云DBA专家,负责阿里云RDS线上稳定以及专家服务团队.他经历过阿里历年双11实战考验,积累了7年对阿 ...

  8. MySQL 性能优化之高阶神技

    一.前言 MySQL调优对于很多程序员而言,都是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰. 在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询 ...

  9. Mysql 瓶颈优化

    Mysql 瓶颈优化(从小业务到大业务的转变) 假设一个网站(discuz)从最开始访问量很小做到日pv千万,我们来推测一下它的mysql服务器架构演变过程. 1. 第一阶段 网站访问量日pv量级在1 ...

  10. 记一次mysql性能优化过程

    2019独角兽企业重金招聘Python工程师标准>>> 转发自:记一次mysql性能优化过程 由于配置是运行过那么长时间,很稳定,基本上不考虑,所以本次主要是sql的优化,并且集中在 ...

最新文章

  1. ProEssentials实时三维图表控件
  2. 引入extThree20JSON之后,怎么在工程中使用
  3. hunnu---11547 你的组合数学学得如何?
  4. eclipse 插件打包发布
  5. Python编程基础19:封装、继承与多态
  6. oracle rac openstack,利用 Chef 实现 OpenStack 块存储多节点的自动化部署
  7. 图论算法——Prim算法和Kruskal算法
  8. bme280中文技术手册_华为认证数通高级路由交换技术高级工程师 V1.0发布通知
  9. 拿什么拯救Web时代的安全危机
  10. Mycat的使用 - 03.全局序列号
  11. [开源软件]数值计算软件OCTAVE 、SCILAB与R简介
  12. Vmware 的一些序列号
  13. 2020中兴捧月算法大赛 埃德加考特派 区域优胜奖源代码
  14. 存储数据恢复案例_磁盘阵列数据恢复_raid5磁盘掉线数据恢复方法
  15. c语言pow函数原型_C语言pow函数
  16. Selenium WebDriver 常用API
  17. 密码框后的小眼睛怎么写?
  18. Vue 事件修饰符.self的用法
  19. 科学计算基础软件包Numpy学习 02
  20. iocomp iPlot使用说明10 Tables表格

热门文章

  1. jenkins如何在一台机器上开启多个slave
  2. 诺基亚发布首款高功率小基站SCORE以及Flexi Zone LWA支持能力
  3. 编程算法 - 字典分词 代码(C)
  4. 关于解决arduino SHT1x诸多问题
  5. Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上
  6. 百度编辑器(ueditor)上传图片
  7. JavaScript基础学习--事件代理
  8. 微信小程序---导航(navigator)
  9. Real World Kanban作者访谈
  10. 后台获取视图对应的字符串