一个DBA对于开发人员使用MySQL的tips
刚刚入职不久,一个陪伴项目组走过3年的DBA离职,在最后的一天给我们培训了下,下面是记录的一些要点,MySQL的使用、表设计学问还是很大的,以后还会陆续学习数据库部分的相关知识。
1 insert要写字段名,不能光values,避免库表结构变化
2 不要使用select *,写出确切字段,性能考虑,减少IO,MYSQL优化
3 尽量少用联表查询
4 不能使用联表更新,尽量少用load data
5 数据约束尽量由程序保证
6 大数据量排序等操作最好由程序完成
7 所有字段定位为not null,数值型用0代替,字符型用"代替
8 库、表命名方式,按C风格,表名小写,两个 如beiker_sms_template
9 50字节以下的直接使用char,不要使用varchar(update delete会增加开销,数据文件碎片搞,文件系统寻址效率低)
10 不同表相同字段需要使用相同的字段名,如user_id
11 字段加上comment
12 杜绝只增不减的表,要定期删除无效数据
13 尽量使用主键
14 使用前缀索引
create table xxx (
id int(20)
name varchar(255)
value varchr(255)
NOT NULL DEFAULT ‘0000-00-00 00:00:00′
PRIMARY KEY(‘id’)
KEY `userid` (`userid,`’value’,'id’)
)
select * from xxx where userid = xx and value =
提高运行效率
15 对于innodb来说,使用主键锁的是一行,使用索引锁的可能不值一行
16 对于MyISAM 在进行大批量插入前可以将索引关闭,等全部插入完毕后再开启索引,进行索引更新
alter table xxx disable keys;
insert …… insert效率很高
endable keys; 耗时的是分析索引
17 单表数据量建议少于2KW,否则存在性能拐点,需要拆表
18 union操作尽量少用,必须的情况下用union all,而不要使用union,两次结果重复的行去除掉,CPU IO消耗会少很多,数据量小的话没事
19 not in不会使用索引,建议不要使用in,尽量程序做
20 不要用ctrl c停止一个脚本 用kill 否则主从同步会不一致。
分类:
MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?