精华内容
下载资源
问答
  • mysql调优

    2018-11-20 18:59:48
    mysql调优


    中小型项目推荐使用mysql

    性能分析

    在mysql的配置文件里开启慢sql日志的记录
    必要的话开启无索引的sql日志记录
    使用mysql的执行计划分析sql的性能瓶颈EXPLAIN

    mysql内部执行

    在这里插入图片描述

    从sql层的常用调优

    1. 单条查询最后添加 LIMIT 1,停止全表扫描。
    2. 不用 MYSQL 内置的函数。由于内置函数不会建立查询缓存。
    3. 使用 IP 而不是域名做数据库路径。避免 DNS 解析问题
    4. 将非”索引”数据分离,比方将大篇文章分离存储,不影响其它自己主动查询。
    5. 避免使用insert,deleted操作,会锁表
    6. 为搜索字段建索引
    7. 在Join表的时候使用相当类型的例,并将其索引
    8. 千万不要 ORDER BY RAND() ,MySQL会不得不去执行RAND()函数(很耗CPU时间),而且这是为了每一行记录去记行,然后再对其排序
    9. 避免 SELECT *
    10. 永远为每张表设置一个ID,使用 VARCHAR 类型来当主键会使用得性能下降。
    11. 使用 ENUM 而不是 VARCHAR ,保存类型使用TINYINT
    12. 尽可能的使用 NOT NULL,使用null也需要额外的空间,同样影响查询效率
    13. 设计表遵循3大范式
    14. 通常来说把可为NULL的列改为NOT NULL不会对性能提升有多少帮助,只是如果计划在列上创建索引,就应该将该列设置为NOT NULL。
    15. 对整数类型指定宽度,比如INT(11),没有任何卵用。INT使用32位(4个字节)存储空间,那么它的表示范围已经确定,所以INT(1)和INT(20)对于存储和计算是相同的。
    16. UNSIGNED表示不允许负值,大致可以使正数的上限提高一倍。比如TINYINT存储范围是-128 ~ 127,而UNSIGNED TINYINT存储的范围却是0 - 255。
    17. 通常来讲,没有太大的必要使用DECIMAL数据类型。即使是在需要存储财务数据时,仍然可以使用BIGINT。比如需要精确到万分之一,那么可以将数据乘以一百万然后使用BIGINT存储。这样可以避免浮点数计算不准确和DECIMAL精确计算代价高的问题。
    18. TIMESTAMP使用4个字节存储空间,DATETIME使用8个字节存储空间。因而,TIMESTAMP只能表示1970 - 2038年,比DATETIME表示的范围小得多,而且TIMESTAMP的值因时区不同而不同。
    19. 大多数情况下没有使用枚举类型的必要,其中一个缺点是枚举的字符串列表是固定的,添加和删除字符串(枚举选项)必须使用ALTER TABLE(如果只只是在列表末尾追加元素,不需要重建表)。
    20. schema的列不要太多。原因是存储引擎的API工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列,这个转换过程的代价是非常高的。如果列太多而实际使用的列又很少的话,有可能会导致CPU占用过高。
    21. 大表ALTER TABLE非常耗时,MySQL执行大部分修改表结果操作的方法是用新的结构创建一个张空表,从旧表中查出所有的数据插入新表,然后再删除旧表。尤其当内存不足而表又很大,而且还有很大索引的情况下,耗时更久。当然有一些奇技淫巧可以解决这个问题,有兴趣可自行查阅。
    22. 优化UNION MySQL处理UNION的策略是先创建临时表,然后再把各个查询结果插入到临时表中,最后再来做查询。因此很多优化策略在UNION查询中都没有办法很好的时候。经常需要手动将WHERE、LIMIT、ORDER BY等字句“下推”到各个子查询中,以便优化器可以充分利用这些条件先优化。
      除非确实需要服务器去重,否则就一定要使用UNION ALL,如果没有ALL关键字,MySQL会给临时表加上DISTINCT选项,这会导致整个临时表的数据做唯一性检查,这样做的代价非常高。当然即使使用ALL关键字,MySQL总是将结果放入临时表,然后再读出,再返回给客户端。虽然很多时候没有这个必要,比如有时候可以直接把每个子查询的结果返回给客户端。

    从使用方案层调优

    1. 充分使用索引 创建高性能索引
    2. 提高磁盘读写速度
    3. 降低磁盘写入操作,加大内存缓存
    4. 数据预热
    5. 选择合适的存储引擎: InnoDB,支持缓存,支持事务,支持行锁
    6. 查询结果变化频率低的建议使用缓存 系统函数 自定义函数是不支持缓存的
    7. 无缓冲的查询
    8. 把IP地址存成 UNSIGNED INT
    9. 固定长度的表会更快
    10. 垂直分割
    11. 越小的列会越快
    12. 使用一个对象关系映射器(Object Relational Mapper)
    13. 小心“永久链接” ,“永久链接”的目的是用来减少重新创建MySQL链接的次数。当一个链接被创建了,它会永远处在连接的状态,就算是数据库操作已经结束了。

    参考 https://www.cnblogs.com/liujiacai/p/7605612.html

    展开全文
  • Mysql调优

    2020-11-10 14:12:37
    通过学习本课程,你将掌握下面内容: 1.linux环境下安装Mysql。 2.获取Mysql的慢查询语句。 3.常用存储引擎的底层原理。 4.索引的基本使用、不同存储引擎下的查询原理、索引优化...生产环境中数据库的查询调优。  
  • MySQL调优

    2019-09-27 10:52:00
    MySQL调优 MySQL调优可以从几个方面来做:1. 架构层:做从库,实现读写分离; 2.系统层次:增加内存;给磁盘做raid0或者raid5以增加磁盘的读写速度;可以重新挂载磁盘,并加上noatime参数,这样可以减少磁盘的i/o;...

    MySQL调优

    MySQL调优可以从几个方面来做:
    1. 架构层:
    做从库,实现读写分离;

    2.系统层次:
    增加内存;
    给磁盘做raid0或者raid5以增加磁盘的读写速度;
    可以重新挂载磁盘,并加上noatime参数,这样可以减少磁盘的i/o;

    3. MySQL本身调优:
    (1) 如果未配置主从同步,可以把bin-log功能关闭,减少磁盘i/o
    (2) 在my.cnf中加上skip-name-resolve,这样可以避免由于解析主机名延迟造成mysql执行慢
    (3) 调整几个关键的buffer和cache。调整的依据,主要根据数据库的状态来调试。如何调优可以参考5.

    4. 应用层次:
    查看慢查询日志,根据慢查询日志优化程序中的SQL语句,比如增加索引

    5. 调整几个关键的buffer和cache

    1) key_buffer_size 首先可以根据系统的内存大小设定它,大概的一个参考值:1G以下内存设定128M;2G/256M; 4G/384M;8G/1024M;16G/2048M.这个值可以通过检查状态值Key_read_requests和 Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。注意:该参数值设置的过大反而会是服务器整体效率降低!


    2) table_open_cache 打开一个表的时候,会临时把表里面的数据放到这部分内存中,一般设置成1024就够了,它的大小我们可以通过这样的方法来衡量: 如果你发现 open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。


    3) sort_buffer_size 查询排序时所能使用的缓冲区大小,该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 4 = 400MB。所以,对于内存在4GB左右的服务器推荐设置为4-8M。


    4) read_buffer_size 读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!


    5) join_buffer_size 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!


    6) myisam_sort_buffer_size 这个缓冲区主要用于修复表过程中排序索引使用的内存或者是建立索引时排序索引用到的内存大小,一般4G内存给64M即可。


    7) query_cache_size MySQL查询操作缓冲区的大小,通过以下做法调整:SHOW STATUS LIKE ‘Qcache%’; 如果Qcache_lowmem_prunes该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。如果该值非常大,则表明经常出现缓冲不够的情况,需要增加缓存大小;Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,我们可以根据实际情况做出调整。一般情况下4G内存设置64M足够了。


    8) thread_cache_size 表示可以重新利用保存在缓存中线程的数,参考如下值:1G —> 8 2G —> 16 3G —> 32 >3G —> 64
    除此之外,还有几个比较关键的参数:


    9) thread_concurrency 这个值设置为cpu核数的2倍即可


    10) wait_timeout 表示空闲的连接超时时间,默认是28800s,这个参数是和interactive_timeout一起使用的,也就是说要想让wait_timeout 生效,必须同时设置interactive_timeout,建议他们两个都设置为10


    11) max_connect_errors 是一个MySQL中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的情况。与性能并无太大关系。为了避免一些错误我们一般都设置比较大,比如说10000


    12) max_connections 最大的连接数,根据业务请求量适当调整,设置500足够


    13) max_user_connections 是指同一个账号能够同时连接到mysql服务的最大连接数。设置为0表示不限制。通常我们设置为100足够

    转载于:https://www.cnblogs.com/ddgen/p/7119844.html

    展开全文
  • MySql调优

    2018-01-10 13:41:35
    MySql调优主要有以下内容: 理解MySql底层B+ Tree机制 SQL执行计划详解 索引优化详解 SQL语句优化

    MySql调优主要有以下内容:

    • 理解MySql底层B+ Tree机制
    • SQL执行计划详解
    • 索引优化详解
    • SQL语句优化
    展开全文
  • MySQL 调优

    2021-04-07 11:24:29
    MySQL 慢语句如何调优? 写sql语句的时候where会考虑什么? MySQL如何定位并优化慢查询sql 根据慢日志定位慢查询sql 用explain等工具分析sql 修改 sql 让sql走索引 数据库的大表查询优化 MySQL 对于千万级的大表要...

    存储类型

    MySql varchar类型,插入的数据超过设置的长度

    MySQL中char与varchar区别,varchar最大长度是多少?

    MySQL 如何分析一条语句的执行过程

    在这里插入图片描述

    SQL 优化

    你不得不必须掌握的30种SQL语句优化

    数据库的大表查询优化

    MySQL 对于千万级的大表要怎么优化?

    MySQL分页优化

    MySQL优化之超大分页查询

    limit, order by 利用索引

    explain 使用

    MySQL如何定位并优化慢查询sql

    • 根据慢日志定位慢查询sql
    • 用explain等工具分析sql
    • 修改 sql 让sql走索引

    面试前必须知道的MySQL命令【explain】

    展开全文
  • mysql 调优

    2021-09-04 16:23:47
    https://dev.mysql.com/doc/index-other.html

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 70,301
精华内容 28,120
关键字:

mysql调优

mysql 订阅