mysqs
1.表结构InnoDB和MyISAM的区别
这两个在数据目录下对应的数据库子目录会创建一个专门用于描绘表结构的文件,以 表名.frm 为结尾的文件。InnoDB还会创建 表名.ibd文件 存储表数据。而MyISAM全是二级索引,数据和索引是分开存放的,所以会对应生成 表名.MYD 存储数据(MYData) 和 表名.MYI 存储索引(MYIndex). 当然在8.0的版本有不一样,InnoDB两个文件合并在 表名.ibd下,MyISAM的 表名.frm 文件变成 表名.xxx.sdi。
InnoDB支持事务和行锁。MyISAM不支持事务,支持表锁,索引都是二级索引。
“MySQL的配置文件在windows系统为 my.ini 而在linux或者MacOs是 my.cnf
2.优化方面
1)索引优化:给查询字段高的添加索引,在添加完索引我们在编写sql语句的时候要防止索引失效,以下是失效情况:类型转换,范围条件右边的列索引失效(所以把范围条件放最后)、不等于(!= 或者<>)索引失效、is null可以使用索引,is not null无法使用索引、 like以通配符%开头索引失效、OR 前后存在非索引的列,索引失效。
给字符串添加索引:使用前缀索引,,既节省空间,又不用额外增加太多的查询成本,区分度还高。


6)使用 Redis 作为缓存 ,减少数据库压力。
7)优化MySQL服务器 比如硬件、参数(比如innodb_buffer_pool_size基本都是缓存参数大小)。
8)库级优化:从一主一从,到双主双从。
9)选择适合的 DBMS
3.索引
优点:1)降低数据库的IO成本。 2)保证数据的唯一性。3)加速表和表之间的连接(加强子表和父表联合查询速度) 4)减少查询中分组和排序的时间。
缺点:1)创建维护索引耗费时间。2)需要占据磁盘空间。3)减低跟新表的速度,因为数据跟新索引也要维护。
查看表的索引
SHOW INDEX FROM <表名>
create
4.表的约束(约束为了保证数据的完整性)constraint
约束对表中字段的限制。
角度2解释
角度3
建表后再重新添加约束,modify
5.索引条件下推ICP
前一个条件走索引查出100,后一个条件没走索引,先不回表,先从这100条通过第二个条件查询,查询出来的结果再回表。
6.数据库设计范式
第一、第二、第三、巴斯、第四、第五范式。越往后数据冗余度越低。
1NF告诉我们字段属性需要是原子性,2NF告诉我们一张表就是一个独立的对象,一张表只表达一个意思。
1NF这样是错的,要分成两条
2NF
3NF非主属性不能有依赖关系,必须相互独立。
7.覆盖索引
少一个也算覆盖索引,id也是主键索引,多一个字段就不是覆盖索引。
一个索引包含了满足查询结果的数据就叫做覆盖索引。
8.sql的优化
9.定位执行慢的sql:慢查询日志
mysql数据库没有开启慢查询日志,需要调优才启动参数,因为开启会或多或少带来一定性能影响。
set global slow_query_log='ON' 开启后慢查询会再slow-log里。
10.show profile
11.explain
extra出现以下的意思
Using where 表示使用where过滤
Using index 表示使用了覆盖索引避免了回表查询
type:system > const > eq_ref > ref > range > index > ALL
12.group by
where条件用于group by之前,having用于group by 之后对结果进行筛选。
数据库的索引通常使用B树(或其变种,如B+树)结构来实现。B树是一种多叉平衡搜索树,它能够高效地支持插入、删除和查找操作,并且适用于磁盘存储等场景。
索引的主要目的是提高数据库的查询性能,因此需要满足以下几个要求:
-
排序:索引必须按照某种排序方式组织数据,以便支持范围查询和排序操作。B树是一种有序的数据结构,可以很好地满足这个要求。
-
快速查找:索引应该支持高效的查找操作,能够快速定位到符合条件的记录。B树通过多层次的节点结构,每层节点包含多个子节点和对应的键值范围,通过比较键值进行二分查找,从而快速定位到目标记录。
-
磁盘访问优化:索引的设计应该尽量减少磁盘IO次数,以提高查询效率。B树具有平衡性,每个节点的子节点数量相对较大,使得树的高度相对较小,从而减少了磁盘IO次数。
相比之下,哈希表在某些场景下也可以作为索引的实现方式,但通常不作为数据库索引的首选。原因如下:
-
哈希表适合于等值查询:哈希表通过将键值映射到存储桶中,可以快速进行等值查询。然而,对于范围查询、排序操作和模糊查询等,哈希表的性能并不好。
-
无序性:哈希表是无序的数据结构,对于需要有序存储和查询的场景,如范围查询和排序操作,哈希表无法直接满足要求。
-
冲突处理:哈希表中可能存在哈希冲突的情况,即不同的键值映射到同一个存储桶中。冲突的处理涉及到额外的开销,可能会降低查询效率。
综上所述,B树由于其有序性、快速查找和磁盘访问优化等特点,更适合作为数据库索引的实现方式,而哈希表在某些特定场景下可以作为辅助索引。
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
语句来设置当前会话的隔离级别。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY