如何才能学好MySQL_MySQL学习方法与实战技能提升教程

嘿嘿,这个MySQL学习路径还蛮详细的,不过感觉有点像看说明书。
我们需要把它变成可以和你聊天的东西。

上周,有客户问我学习MySQL最大的问题是什么。
他说信息太多他不知道从哪里开始。
我以为这件事需要一步一步来做,但是没必要那么认真。

我们先来说说如何开始。
大家想一想,学任何东西都得先了解基本概念吧?就像你第一次租房子时,你需要知道什么是主键(唯一的识别号)和什么是外键(例如租赁协议和业主数据之间的关系),否则你连数据库是什么样子的都看不懂。
刚刚看了《MySQL必知必知》这本书。
SQL 语句(SELECT、INSERT 等)足够清晰,但还不足以阅读和使用它们。

你最好找一个真实的场景来练习。
比如创建一个“学生管理系统”,自己设计一个表格,输入一些数据,然后删除、编辑、查看。
我自己遇到的陷阱是,一开始我只看理论,认为“JOIN”相当高级。
但是,当我在联合表上编写查询时,它崩溃了。
后来发现是要添加的索引没有添加。
所以记住,理论联系实际,不要只看书本。

说到现实环境,现在的年轻人谁还喜欢在电脑里装一堆东西?我建议使用 Docker 在几分钟内设置您的 MySQL 环境。
该命令由几行组成: docker pull mysql:8 .0 提取镜像,运行 docker run,添加密码,端口 3 3 06 将打开。
比进行这些配置容易得多。
当然,如果你喜欢乱搞,也可以本地安装,可以选择Windows/macOS/Linux版本。

到了后期,就需要开始考虑性能了。
这其实是很有趣的。
例如,如果您发现查询突然变慢,您需要知道如何找出原因。
最让我恼火的是,在编写JOIN时,结果总是需要“全表扫描”。
此时需要使用EXPLAIN命令来验证执行计划。
如果索引没有正确添加或者数据量太大。
记住不要使用SELECT,它很愚蠢,只检查你需要的列。

索引尤为重要。
想想看,如果图书馆没有索引,找书要花很长时间吧?但索引越多越好。
我见过人们为每个字段添加索引,但在写入数据时数据库崩溃了。
这取决于您的查询需求。
例如,如果您经常按日期查询,则添加日期索引。
B-Tree索引最常用,Hash索引只适合等价查询,全文索引适合文本搜索。

高级阶段取决于您对数据库的野心有多大。
如果你想像金融系统一样运行高并发,你需要了解事务隔离的级别(你知道什么是“脏读”和“不可重复读”吗?)和锁定机制(你需要了解行锁和表锁的区别)。
存储引擎的选择也是至关重要的。
InnoDB支持事务,适合高并发写入; MyISAM 有查询速度快但无事务,适合只读场景。
这个一定要结合你的实际业务。

复制和高可用也需要学习。
主从复制是基础。
半同步复制可以保证数据不丢失。
如果您追求硬可用性,则需要了解组复制。
监控工具也非常重要。
Percona监控和管理(PMM)非常易于使用,可以显示各种性能指标。

最后,说实话。
别急着想,彻底学习MySQL需要大量的练习。
我建议找到一个促进学习的项目,例如构建一个简单的博客系统或电子商务后端,并边做边学。
如果遇到问题,可以到社区询问。
MySQL 官方论坛和 Stack Overflow 上有人可以为您提供帮助。
不要忘记关注 MySQL 的新版本。
例如,8 .0版本中的窗口函数和CTE(公用表表达式)都是非常有趣的新功能。

但是,当你学到东西时不要着急。
一步一步来,多做,多想,你就会慢慢开始。
你现在到底被困在哪里?我可以帮你看一下。

mysql添加索引命令 mysql创建普通唯一复合索引教程

普通索引可以加速非唯一查询。
CREATEINDEXidx_user_nameONusers(用户名); ALTERTABLEproductsADDINDEXidx_product_category(category_id);
唯一索引确保列值是唯一的。
创建 UNIQUEINDEXuniq_user_emailONusers(电子邮件); ALTERTABLEOrdersADDUNIQUEINDEXuniq_order_number(order_number);
复合索引必须按顺序排列。
CREATEINDEXidx_user_name_fullONusers(姓氏, 名字); ALTERTABLEInventoryADDINDEXidx_product_warehouse(product_id,warehouse_id);
复合唯一索引是多个列的唯一组合。
CREATEUNIQUEINDEXuniq_user_product_rank products_rank(user_id, Product_id); ALTERTABLE Student_enrollmentsADDUNIQUEINDEXuniq_course_student_semester(course_id、student_id、semester_id);
使用 DROPINDEX 删除索引。
DROPINDEXidx_user_nameONusers;索引失败的常见原因:
带有查询的函数 (WHERESUBSTRING(name,1 ,3 )=...) 前缀通配符 (WHEREnameLIKE '%ABC')
索引上的 OR 条件 (WHEREstatus='active'ORtype='premium')
使用 EXPLAIN 确定索引是否处于活动状态。
注意关键列和附加列(例如 Usefilesort)。

复合索引列顺序:
等值查询放在列前面(WHEREcol1 ='value1 ')。

高度优化的列(电子邮件)优先于低度优化的列(性别)。
范围查询后不能在列上使用索引 考虑 ORDERBY 和 GROUPBY 列排序
覆盖索引可以避免表回滚查询
索引过多:
写入性能降低(每个插入/更新的同步索引)
占用更多磁盘空间(索引文件可能比数据文件大)
辅导员选择了错误的计划
维护成本增加
最佳实践: 按需创建索引(分析关键查询)
持续优化(使用EXPLAIN和慢查询日志)
避免过度索引(刚刚好)
权衡一下自己。