mysql 注意点

mysql 优化:

每个innodb 表都要有一个主键
限制表上索引的数量,避免建立重复和冗余索引
注意合理选择复合索引键值的顺序

优先选择符合存储需要的最小的数据类型
varchar(N) 中的N 代表的是字符数,而不是字节数
使用UTF8 存储汉字 varchar(255) = 765 个字节
过大的长度会消耗更多的内存
避免使用text,blob 数据类型

避免使用join 关联太多的表
每join 一个表会多占用一部分内存(join_buffer_size)
会产生临时表操作,影响查询效率
mysql 最多允许关联61个表,建议不超过5个

减少同数据库的交互次数
数据库更适合处理批量操作
合并多个相同的操作到一起,可以提高处理效率

使用in 代替or
in 的值 不要超过 500个
in 操作可以有效的利用索引

禁止使用 order by rand() 进行随机排序
会把所有符合条件的数据装载到内存进行排序
会消耗大量的CPU 和IO 及内存资源
推荐在程序中获取一个随机值,然后从数据库中获取数据的方式

where 从句中禁止对列进行函数转换和计算
对列进行函数转换或计算会导致无法使用索引

在明显不会有重复值时使用union all 而不是 union
union 会把所有数据放到临时表中后再进行去重操作
union all 不会再对结果集进行去重操作
super 权限只能留给DBA 处理问题的账号使用

对于程序连接数据库账号,遵循权限最小原则

拆分复杂的大SQL 为多个小SQL
mysql 一个SQL 只能使用一个CPU 进行计算
sql 拆分后可以通过并行执行来提高处理效率

超过100万行的批量写操作,要分批多次进行操作
大批量操作可能会造成严重的主从延迟
binlog 日志为row 格式是会产生大量的日志
避免产生大事务操作

禁止为程序使用的账号赋予super 权限
当达到最大连接数限制时,还允许1个有super 权限的用户连接

posted @ 2017-06-08 21:06  shijiu520  阅读(128)  评论(0编辑  收藏  举报