mysql事务隔离级别?
https://blog.csdn.net/m0_51654746/article/details/126383717?spm=1001.2014.3001.5501
数据库的优化
- 使用
PreparedStatement
代替Statement
- 尽量不要使用外键,自己用代码进行数据的约束
- 表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等,可以加快查询速率
- UNION ALL 要比 UNION 快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用 UNIONALL。
常用的索引有哪些种类?
-
普通索引: 即针对数据库表创建索引
-
唯一索引: 与普通索引类似,不同的就是:MySQL 数据库索引列的值必须唯一,但允许有空值
-
主键索引: 它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引
-
组合索引: 为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。即将数据库表中的多个字段联合起来作为一个组合索引。
mysql 数据库中索引的工作机制是什么?
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B 树及其变种 B+树
mysql 的复制原理以及流程?
- Master将数据改变记录到二进制日志(binary log)中,也就是配置文件
log-bin
指定的文件,这些记录叫做二进制日志事件
(binary log events) - Slave通过I/O线程读取Master中的binary log events并写入到它的中继日志(relay log)
- Slave重做中继日志中的事件,把中继日志中的事件信息一条一条的在本地执行一次,完成数据在本地的存储,从而实现将改变反映到它自己的数据(数据重放)
mysql 支持的复制类型?
-
基于语句的复制
: 在主服务器上执行的 SQL 语句,在从服务器上执行同样的语句。MySQL 默认采用基于语句的复制,效率比较高。 一旦发现没法精确复制时,会自动选着基于行的复制。 -
基于行的复制
:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从 mysql5.0 开始支持 -
混合类型的复制
: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
mysql 中 myisam 与 innodb 的区别?
- myisam不支持事务,innodb支持事务
- myisam支持表锁,innodb支持行锁
- InnoDB 支持 MVCC, 而 MyISAM 不支持
- InnoDB 支持外键,而 MyISAM 不支持
- myisam允许没有任何索引和主键的表存在,索引都是保存行的地址,InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个 6 字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
- InnoDB 不支持全文索引,而 MyISAM 支持
mysql 中 varchar 与 char 的区别以及 varchar(50)中的 50 代表的涵义?
char
是一个定长字符串,varchar
是一个可变长字符串
varchar(50)
中的50表示的是最大长度为50
表中有大字段 X(例如:text 类型),且字段 X 不会经常更新,以读为主,将该字段拆成子表好处是什么?
MYSQL 数据库的记录存储是按行存储的,数据块大小又是固定的(16K),每条记录越小,相同的块存储的记录就越多。此时应该把大字段拆走,这样应付大部分小字段的查询时,就能提高效率。
MySQL 中 InnoDB 引擎的行锁是通过加在什么上完成(或称实现)的?
InnoDB 行锁是通过给索引上的索引项加锁来实现的
只有通过索引条件检索数据,InnoDB 才使用行级锁,否则,InnoDB 将使用表锁!
[SELECT *] 和[SELECT 全部字段]的 2 种写法有何优缺点?
- 前者要解析数据字典,后者不需要
- 结果输出顺序,前者与建表列顺序相同,后者按指定字段顺序。
- 表字段改名,前者不需要修改,后者需要改
- 后者可以建立索引进行优化,前者无法优化
- 后者的可读性比前者要高
having 子句 和 where的异同点?
- 语法上:where 用表中列名,having 用 select 结果别名
- 影响结果范围:where 从表读出数据的行数,having 返回客户端的行数
- 索引:where 可以使用索引,having 不能使用索引,只能在临时结果集操作
- where 后面不能使用聚集函数,having 是专门使用聚集函数的。