MySQL篇
学习MySQL
wupanP
这个作者很懒,什么都没留下…
展开
-
主键与索引有什么区别?
主键一定会创建一个唯一索引,但是有唯一索引的列不一定是主键;主键是一种约束,而唯一索引是一种索引,用于加速查询。一个表只能有一个主键,但是可以有多个唯一索引;主键可以被其他表引用为外键,唯一索引列不可以;主键不允许为空值,唯一索引列允许空值;原创 2024-07-23 17:01:49 · 115 阅读 · 0 评论 -
使用 MySQL 的索引应该注意些什么?
选择合适的列:为经常用作搜索条件(WHERE、JOIN、ORDER BY 和 GROUP BY 子句)的列创建索引。为选择性高的列创建索引。选择性高的列是那些唯一值多的列,这样能更有效地利用索引。避免过多的索引:虽然索引能提高查询速度,但也会增加插入、更新和删除操作的开销。因此,不要为每个列都创建索引,只为那些真正需要的列创建索引。使用复合索引:当一个查询涉及多个列时,使用复合索引(多列索引)可以比单列索引更高效。在创建复合索引时,把选择性最高的列放在最前面。索引类型的选择:原创 2024-07-23 16:50:33 · 151 阅读 · 0 评论 -
说说什么是锁升级?
锁升级是数据库管理系统中的一种机制,用于在事务处理过程中自动或手动将较低级别的锁(如行级锁)转换为更高级别的锁(如表级锁)。这种机制主要是为了在面对大量的行级锁请求时减少系统的锁管理开销,提高性能,同时减少潜在的死锁风险。原创 2024-07-23 16:22:06 · 334 阅读 · 0 评论 -
请说说 MySQL 数据库的锁?
行级锁提供了最高的并发处理能力,因为只锁定需要修改或查询的数据行。行级锁主要在 InnoDB 存储引擎中使用。表级锁是最简单的锁类型,开销最小,但并发能力较低。例如,在 MyISAM 存储引擎中主要使用表级锁。原创 2024-07-23 15:56:38 · 212 阅读 · 0 评论 -
说说 MVCC 的实现原理
MVCC(多版本并发控制)是一种广泛使用的数据库并发控制技术,它允许在保持读取操作的一致性的同时,执行写入操作,从而提高数据库系统的并发性能。原创 2024-07-23 11:45:06 · 291 阅读 · 0 评论 -
MVCC 可以为数据库解决什么问题?
在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能。同时还可以解决脏读、幻读、不可重复读等事务隔离问题,但不能解决更新丢失问题。更新丢失问题需要通过额外的同步机制(如乐观锁、悲观锁或更高的事务隔离级别)来解决。这些机制可以确保并发写操作的正确性,避免数据更新的丢失。原创 2024-07-23 11:30:00 · 217 阅读 · 0 评论 -
说说什么是 MVCC?
MVCC 通过为每个事务分配唯一的时间戳,并为每次数据修改创建新版本,确保了读操作与写操作之间的无锁并发。事务在读取数据时,只读取事务开始前的数据快照,从而避免了脏读和不可重复读。这种机制大大提高了数据库的并发性能和数据一致性。原创 2024-07-23 11:21:26 · 384 阅读 · 0 评论 -
什么时候不要使用索引?
1. 小表原因: 对于记录较少的小表,全表扫描的性能已经非常好,使用索引可能带来的性能提升非常有限,反而增加了维护索引的开销。示例: 只有几十行记录的配置表或状态表。2. 高频率的插入、更新和删除操作原因: 索引不仅在查询时使用,在插入、更新和删除操作时也需要维护。频繁的写操作会导致索引频繁更新,增加了额外的性能开销。示例: 日志记录表、事务表等需要频繁写入数据的表。3. 低基数列原因: 如果列的基数(不同值的数量)很低,索引的选择性不高,索引的效果会非常差。例如,对于性别列(只有“原创 2024-07-23 10:45:12 · 205 阅读 · 0 评论 -
MySQL 索引类型有哪些?
将文本字段拆分成单词,然后对每个单词建立索引。查询时,通过匹配查询词与倒排索引中的单词来找到相关记录。例如,SELECT * FROM table WHERE MATCH(column) AGAINST(‘keyword’)。仅适用于 MyISAM 和 InnoDB 存储引擎(MySQL 5.6 及更高版本的 InnoDB 支持全文索引)。主要用于全文搜索,可以加速对文本字段的关键词查询。适用于 CHAR、VARCHAR 和 TEXT 类型的列。原创 2024-07-23 10:08:23 · 312 阅读 · 0 评论 -
为什么 SELECT COUNT(*) FROM table 在 InnoDB 比 MyISAM 慢?
这主要是因为两种存储引擎处理行计数的方式不同。原创 2024-07-23 09:42:04 · 313 阅读 · 0 评论 -
int(11) 中的 11 代表什么涵义?
在 MySQL 中,INT(11) 中的 11 并不是表示整数能存储的最大位数,而是与显示宽度有关。原创 2024-07-23 09:25:15 · 349 阅读 · 0 评论 -
MySQL 中 varchar 与 char 的区别?varchar(30) 中的 30 代表的涵义?
CHAR 适用于存储固定长度的字符串,性能可能稍好但浪费空间。VARCHAR 适用于存储可变长度的字符串,更加节省空间,灵活性更高。原创 2024-07-23 09:19:50 · 274 阅读 · 0 评论 -
索引有什么优缺点
原创 2024-07-22 20:45:04 · 74 阅读 · 0 评论 -
说说在 MySQL 中一条查询 SQL 是如何执行的?
MySQL 的存储引擎负责管理数据的存储和检索。存储引擎接收到执行器的请求后,会按照查询计划访问数据并将结果返回给执行器。执行器会逐步按照执行计划的步骤执行查询,并从存储引擎获取数据。访问存储引擎:执行器向存储引擎发送请求,存储引擎根据索引扫描符合 department_id = 10 的记录。MySQL 服务器接收到 SQL 查询后,会对 SQL 语句进行解析(parsing)。数据检索:执行器接收到存储引擎返回的数据,按 age 列进行降序排序。执行器将最终结果返回给客户端,客户端接收到查询结果。原创 2024-07-22 20:19:25 · 339 阅读 · 0 评论 -
分库分表之后,id 主键如何处理?
因为要是分成多个表之后,每个表都是从 1 开始累加,这样是不对的,我们需要一个全局唯一的 id来支持。原创 2024-07-22 20:01:46 · 256 阅读 · 0 评论 -
大表如何优化?
优化大表的性能是数据库管理中的一个重要课题。原创 2024-07-22 19:12:56 · 456 阅读 · 0 评论 -
事务隔离级别有哪些?MySQL的默认隔离级别是?
允许事务读取其他事务尚未提交的数据,最低的隔离级别。原创 2024-07-22 17:39:32 · 409 阅读 · 0 评论 -
什么是内联接、左外联接、右外联接?
返回左表中的所有记录,以及右表中满足连接条件的记录。如果左表中的记录在右表中没有匹配记录,则结果集中仍会包含该记录,右表的字段将显示为 NULL。返回右表中的所有记录,以及左表中满足连接条件的记录。如果右表中的记录在左表中没有匹配记录,则结果集中仍会包含该记录,左表的字段将显示为 NULL。只返回两个表中满足连接条件的记录。如果某行在其中一个表中没有匹配记录,则该行不会出现在结果集中。原创 2024-07-22 17:08:46 · 136 阅读 · 0 评论