总结MYSQL的优化51CTO博客 - 千亿集团

总结MYSQL的优化51CTO博客

2019-01-04 21:31:53 | 作者: 觅云 | 标签: 运用,数据,假如 | 浏览: 2630

这个我一年多前写的。今后有时刻同享一下新的优化。
究竟其时的知道仍是十分浅的。


假如我们有贰言,能够在后边弥补。我会随时更新的。

现在大约列出如下:(望各位弥补)
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]
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表千亿集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2

    case句子的用法ITeye

    句子,函数,用法
  • 3

    mysqlITeye

    装置,数据库
  • 4

    exceptionITeye

    成果,形似,有点
  • 5
  • 6

    mysql的count函数优化ITeye

    索引,优化,情况
  • 7
  • 8

    DB2锁机制ITeye

    机制,程序,数据
  • 9

    oracle功能优化总结ITeye

    索引,视图,优化
  • 10

    oracle存储进程ITeye

    存储,进程,数据