• 暂时停更一段时间!
  • 近期网站将陆续进行前端页面改造!
  • 招募网站编辑,联系站长!

MySQL的使用注意事项

文章目录[隐藏]

MySQL 本身的使用和配置有以下注意点

MySQL 默认的连接数是 100 , 调整 MySQL 的最大连接数能够在一定程度上提高井发能力 。

使用慢查询日志监测导致数据库响应缓慢的 SQL 语句 。

MySQL 有一个常见的连接缓慢原因,那就是会根据域名做反向 DNS 查询 。 这个问题可以通过在 MySQL 中加入 skip-name-resolve 选项来解决(同时需要在 MySQL 用户权限中把 root@l27.0.0.l 都配置上),还可以通过在 hosts 中加入本机域名的映射来解决。

MySQL 命令行中命令以飞 G 结束,改变结果显示方式为列 。

通过提升 CPU 和内存、使用 SSD ,能显著提升 MySQL 性能 。

可以使用 PT 工具箱( Percona Toolkit )对 MySQL 进行管理,包括检查主从复制的数据一致性、检查重复索引、在线 DDL 、定位 1/0 占用高的表文件等 。

DDL

在设计数据库的时候有以下注意点和技巧 。

禁用存储过程、函数、触发器、外键约束,尽量依赖于业务层面做,这样能够具有良好的可扩展性 。

允许为 NULL 的列, 在非查询时会无法匹配 ,如 where status !=’FINISH’ ,那么 status 为 NULL 的行也无法匹配 。

使用枚举或整数类型代替字符串类型 。

ID 使用 BIGINT 即可 ,对应于 Java 中的 long 类型 ,足够使用 。

对整数类型指定宽度,比如 INT(ll ) 、 BIGINT(20),并不影响存储大小, INT 依然使用 32 位( 4 字节)存储空间, BIGINT 依然使用 64 位( 8 字节)存储空 间,宽度仅表示显示的长度 。

避免使用 DECIMAL 和浮点数数据类型 ,可以使用 BIGINT 代替(浮点数乘以一个倍数) 。

数据库中的表最好带有创建和更新时间戳,以及所创建/修改行的用户标识,以审计追踪数据的变动 。

不要真的删除数据,可以给它们打上一个被删除的标记或者做版本化修改 。

单表不要有太多字段,建议在 15 以内 。

用整数类型而不是字符串存储 IP 。

DML

在数据查询的时候有以下注意点和技巧 。

在查询语句中不要使用全属性选择器*。

尽量避免使用负向查询( !和〈〉)和 or 查询,而使用 in 代替 。 in 的查询效率是 log(n )

对于连续条件的查询,使用 between 而不是 in。

模糊匹配查询时,当为后缀模糊查询时能够使用索引,如 like ‘a%',而前缀则不行 。

查询记录数目时,使用 count( l )和 count (*) 是等价的,在有索引的时候都会去选择合适的索引,没有索引的时候则全表扫描 。 而 count(column)则是统计 column 不为 NULL 的记录数目 。

避免多于两表 Join ,尽量使用冗余策略解决联表问题 。

避免列运算,如 select * where age+ 1 > 100 。

批量插入代替循环单条插入,能够减少网络 1/0 带来的开销 。

一个很耗时的 SQL 会堵死整个库,可以拆开多个小的语句进行,以减少锁的时间 。

使用 UNION 时,除非确实需要服务器去重,否则一定要使用 UNION ALL 。 若不是这样, MySQL 会给临时表加上 DISTINCT 选项,导致整个临时表的数据做唯一性检查,影响查询性能。

插入一条记录后,如果这张表的主键是自增的,推荐使用 SELECT LAST_INSERT_ID ()来获取这个自增值, LAST_INSERT_ID 是基于 Connection 的,只要 Connection 对象不变,获取到的自增 ID 就是正确的,也不需要加锁。

若某一数据列为 bit 类型,那么在用 MySQL 命令行查询的时候是无法看到其值的 。

需要如下查询 :

select bin(bit_column + 0 ) from test_user; //显示二进制数
select bit_column + 0 from test_user; //显示十进制数

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:MySQL 的使用注意事项
喜欢 (0)
[247507792@qq.com]
分享 (0)
多啦H梦
关于作者:
热爱开源,热爱分享,谢谢大家的资瓷!

邀请您免费 注册账号 登录 即可参与讨论!