- ```html
MySQL数据库简介和特点 MySQL数据库简介和特点
MySQL 是开源的,这话你肯定听腻了。据库简介但真正让我在 2008 年第一次把它装进一台破旧台式机时感到意外的和特,是据库简介它居然能在 512MB 内存的机器上跑得飞快。那时候我还在用 Access 做小工具,和特数据量一过十万条就卡得想砸键盘。据库简介换成 MySQL 之后,和特同样的据库简介查询瞬间返回。从那天起,和特它就再也没离开过我的据库简介工具箱。
它最早是和特瑞典 MySQL AB 公司搞出来的,后来被 Sun 收购,据库简介再后来 Sun 又被 Oracle 吞了。和特这段历史听起来像一部并购连续剧,据库简介但好在开源协议没变——GPL 依然有效,社区版照样免费。你可以在自己的笔记本上装一个,在云服务器上装一个,甚至在树莓派上跑一个,不用付一分钱授权费。这种“白嫖”的底气,是很多商业数据库给不了的。
说到特点,第一个蹦进我脑子里的词是“分层”。MySQL 的架构挺有意思,上层是连接管理、SQL 解析、优化器,下层是存储引擎。两者之间有个抽象接口,所以你能换引擎,就像给车换轮胎。最常用的是 InnoDB,支持事务、行级锁、外键。另一个 MyISAM 现在很少用了,它不支持事务,但读性能在某些场景下依然能打。我见过一些老系统还在跑 MyISAM,问就是“懒得改”。
-- 看一眼你当前的存储引擎
SHOW ENGINES;
-- 或者建表时显式指定
CREATE TABLE logs (id INT PRIMARY KEY, msg TEXT) ENGINE=InnoDB;事务这个东西,平时写 CRUD 感觉不到,一旦涉及转账、订单、库存扣减,它就是救命稻草。InnoDB 的 MVCC(多版本并发控制)让读操作基本不阻塞写,写也不阻塞读。我经历过一个电商大促场景,每秒几千个订单写入,InnoDB 靠行锁和 undo log 硬是扛住了。当然,死锁也遇到过——两个事务互相等对方释放锁,结果 MySQL 自己检测到,主动回滚其中一个。那时候我盯着 SHOW ENGINE INNODB STATUS 的输出,第一次觉得数据库像个活物。
“MySQL 的复制功能,是我见过最实用的‘土办法’之一。” —— 某位运维老哥的原话
主从复制这件事,MySQL 做得不算优雅,但足够皮实。原理很简单:主库把 binlog 发给从库,从库重放。异步复制是默认的,主库写完就返回,不管从库收没收到。这有丢数据的风险,所以后来有了半同步复制——至少一个从库确认收到,主库才提交。我见过一个小公司用 MySQL 做主从,从库延迟了 3 秒,结果运营在从库上查数据,发现订单没更新,差点报警。后来他们改成了读写分离中间件,强制关键查询走主库。
分区表也是个有意思的特性。逻辑上是一张表,物理上拆成多个文件。按时间范围分区最常用,比如每个月一个分区。删历史数据时,直接 ALTER TABLE ... DROP PARTITION,比 DELETE 快几个数量级。但分区键选不好,查询会扫描所有分区,反而更慢。我踩过这个坑:用 user_id 做分区键,结果按时间查的时候全表扫,性能直接崩了。
JSON 支持是 5.7 之后的事。以前存 JSON 就是当字符串塞进 TEXT 字段,查的时候用 LIKE '%"key":"value"%',又慢又容易出错。现在有了原生 JSON 类型,可以用 ->> 提取值,还能建虚拟列加索引。我拿它存过用户标签,查询效率比拆成关联表高不少。不过别滥用,JSON 字段一多,表结构就变得像一锅粥,维护起来头疼。
性能方面,MySQL 的查询优化器有时候挺“轴”的。你写个 SELECT * FROM t WHERE a=1 AND b=2,它可能选错索引,或者干脆不走索引。这时候 EXPLAIN 就是你的显微镜。我习惯在开发环境打开 slow_query_log,把超过 1 秒的查询全记下来,每周翻一遍。十有八九能揪出几个没加索引的 WHERE 条件。
安全上,MySQL 的权限系统细到列级别。你可以让某个用户只能查 users 表的 name 和 email 字段,其他一律看不见。但默认安装后,root 用户是空密码或者弱密码,这点被无数人吐槽。我见过一个线上库,3306 端口直接暴露在公网,root 密码是 123456。第二天就被挖矿脚本扫了,数据全被加密,留了比特币地址。所以装完第一件事:改密码,删匿名用户,限制远程访问。
最后说点主观的。MySQL 不是最强的数据库,PostgreSQL 在复杂查询和扩展性上比它猛,MongoDB 在文档模型上比它灵活。但 MySQL 胜在“够用”和“到处都是”。你随便找个云厂商,RDS 默认就是 MySQL。你招个后端,简历上不写 MySQL 都不好意思。它的生态太庞大了——Percona、MariaDB、ProxySQL、Vitess,全是围绕它长出来的。我现在的项目里,MySQL 依然是主力,配一个 Redis 做缓存,一个 ClickHouse 做分析。各司其职,谁也不抢谁的活。
如果你刚开始学数据库,别纠结版本。装个 8.0,把 SELECT、JOIN、INDEX、EXPLAIN 这四个东西玩熟,比看一百篇“MySQL 高级特性”都有用。剩下的,等真遇到瓶颈了再查文档。数据库这东西,不动手写几万行 SQL,光看是看不明白的。
``` 顶: 3515踩: 2496






评论专区