MySQL数据库设计规范和优化建议
发表于:2025-02-20 作者:千家信息网编辑
千家信息网最后更新 2025年02月20日,设计规范建议:1).索引规范显式指定自增 int/bigint unsigned not null 作为主键不使用外键合理利用覆盖索引,但字段尽量不超过5个合理利用最左索引(前缀索引/部分索引)及时删
千家信息网最后更新 2025年02月20日MySQL数据库设计规范和优化建议设计规范建议:
1).索引规范
显式指定自增 int/bigint unsigned not null 作为主键
不使用外键
合理利用覆盖索引,但字段尽量不超过5个
合理利用最左索引(前缀索引/部分索引)
及时删除冗余索引
选择适当的索引顺序,选择性高条件靠前
基数( Cardinality )很低的字段不创建索引(MySQL还不支持 bitmap 索引)
采用第三方系统实现text/blob全文检索
常用排序(ORDER BY)、分组(GROUP BY)、取唯一(DISTINCT)字段上创建索引
单表索引数量不超过5个
索引字段条件不使用函数
2).开发环境
启用log_queries_not_using_indexes
设置long_query_time为最小值
定期检查分析slow log
授权和生产环境一致
关闭Query Cache
设置较小InnoDB Buffer Pool、key buffer size
数据量不能太少,否则有些性能问题无法提前规避
3).行为规范
批量导入、导出数据须提前通知DBA,请求协助观察
推广活动或上线新功能须提前通知DBA,请求压力评估
不使用SUPER权限连接数据库
单表多次ALTER操作必须合并为一次操作
数据库DDL及重要SQL及早提交DBA评审
重要业务库须告知DBA重要等级、数据备份及时性要求
不在业务高峰期批量更新、查询数据库
提交线上DDL需求,所有SQL语句须有备注说明
4).硬件
NUMA新架构,CPU直接存取内存,更高效
CPU一般不是瓶颈,但MySQL多核支持仍不佳
设备越来越廉价,大内存解决很多问题
SSD应用越来越广泛,未来是主力
RAID卡可有效提升IOPS及数据安全(RAID 10 vs RAID 5)
RAID卡必须配备BBU,设置FORCE WB
优化建议:
1).系统
升级到64位
/tmp使用/dev/shm的tmpfs
内核
IO调度:deadline,noop,反正不要cfq
VM管理:vm.swappiness=0
2).文件系统:xfs/zfs
全B+树,高效
分配组,提高并发度
延迟分配,减少IO
mount:nobarrier、data=ordered,writeback
3).MySQL配置
memlock
open_files_limit
max_connections
long_query_time
table_open_cache
key_buffer_size
query_cache_size
tmp_table_size/max_heap_table_size
innodb buffer pool
innodb_flush_log_at_trx_commit
interactive_timeout/wait_timeout
transaction_isolation
innodb_log_file_size
innodb_data_file_path
innodb_max_dirty_pages_pct
1).索引规范
显式指定自增 int/bigint unsigned not null 作为主键
不使用外键
合理利用覆盖索引,但字段尽量不超过5个
合理利用最左索引(前缀索引/部分索引)
及时删除冗余索引
选择适当的索引顺序,选择性高条件靠前
基数( Cardinality )很低的字段不创建索引(MySQL还不支持 bitmap 索引)
采用第三方系统实现text/blob全文检索
常用排序(ORDER BY)、分组(GROUP BY)、取唯一(DISTINCT)字段上创建索引
单表索引数量不超过5个
索引字段条件不使用函数
2).开发环境
启用log_queries_not_using_indexes
设置long_query_time为最小值
定期检查分析slow log
授权和生产环境一致
关闭Query Cache
设置较小InnoDB Buffer Pool、key buffer size
数据量不能太少,否则有些性能问题无法提前规避
3).行为规范
批量导入、导出数据须提前通知DBA,请求协助观察
推广活动或上线新功能须提前通知DBA,请求压力评估
不使用SUPER权限连接数据库
单表多次ALTER操作必须合并为一次操作
数据库DDL及重要SQL及早提交DBA评审
重要业务库须告知DBA重要等级、数据备份及时性要求
不在业务高峰期批量更新、查询数据库
提交线上DDL需求,所有SQL语句须有备注说明
4).硬件
NUMA新架构,CPU直接存取内存,更高效
CPU一般不是瓶颈,但MySQL多核支持仍不佳
设备越来越廉价,大内存解决很多问题
SSD应用越来越广泛,未来是主力
RAID卡可有效提升IOPS及数据安全(RAID 10 vs RAID 5)
RAID卡必须配备BBU,设置FORCE WB
优化建议:
1).系统
升级到64位
/tmp使用/dev/shm的tmpfs
内核
IO调度:deadline,noop,反正不要cfq
VM管理:vm.swappiness=0
2).文件系统:xfs/zfs
全B+树,高效
分配组,提高并发度
延迟分配,减少IO
mount:nobarrier、data=ordered,writeback
3).MySQL配置
memlock
open_files_limit
max_connections
long_query_time
table_open_cache
key_buffer_size
query_cache_size
tmp_table_size/max_heap_table_size
innodb buffer pool
innodb_flush_log_at_trx_commit
interactive_timeout/wait_timeout
transaction_isolation
innodb_log_file_size
innodb_data_file_path
innodb_max_dirty_pages_pct
索引
数据
字段
数据库
重要
系统
建议
业务
条件
环境
越来越
问题
越来
分配
支持
选择
最小
适当
一致
主力
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我的世界主播直播的服务器手机版
网络安全主题团日活动概况
海南工业软件开发服务价格
变电站网络安全管理制度
2022网络安全高峰论坛
着力提升网络安全防护和管理能力
世界各国服务器出口
定义数据库模式是dba职责吗
腾讯云服务器安全防御
人类如何破坏水的数据库
专业服务器结构设计生产商
数据库管理系统的店铺
仓库管理软件数据库设计
深圳市微客网络技术有限公司
数据库错误952
广州市牛霸软件开发有限公司
服务器串口管理恢复密码
全国气温数据库排名
浙江统一软件开发服务推广
戴尔服务器电源引脚参数
智库网络安全吗
sql向多张表添加数据库
ktv网络技术员是做什么的
华为解锁 服务器繁忙
车载软件开发企业公司介绍
崇明区网络软件开发代理品牌
软件开发办公家具
2020公需科目网络安全
百度艾尔登法环服务器
国内商业软件开发平台现状