1.MySQL面试常见之数据表分区如何设计
数据表分区主要是解决监控数据过大造成的单表数据量过大,在存储及查询的过程中对性能造成影响,通过数据表分区,减小数据文件的大小,提高磁盘读写性能。
- 时间阀值需求,指标明细保留90天,趋势数据保留3年
- 监控的指标数据需要能查询90天内的明细,所以原始明细数据保留90天,指标多及监控间隔时间短,必然产生大量的数据
- 每天一个分区存储原始数据
- 统计趋势数据,及删除超过90天的明细数据
- 数据表分区规划示意图
2.MySQL面试常见之查询缓存
数据库优化中,除了Sql本身之外,数据库本身的优化也是很重要的一个环节,缓存就是其中一项。
查看查询缓存情况:
mysql> show variables like '%query_cache%'; (query_cache_type 为 ON 表示已经开启) +------------------------------+----------+| Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES || query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 || query_cache_size | 20971520 | | query_cache_type | ON || query_cache_wlock_invalidate | OFF | +------------------------------+----------+
如果不是ON,修改/etc/my.cnf配置文件以开启查询缓存:
[mysqld]中添加:
query_cache_size = 20M query_cache_type = ON
重启mysql服务使配置查询缓存配置生效:
> service mysql restart
3.通过指令改MySQL配置文件字符集
可以的,MySql8.x支持动态修改配置参数
1、可以的,通过 set global 命令直接修改,不用重启mysql
2、要是8.x 可以用 set persist 新特性
mysql> set persist max_connections=default; Query OK, 0 rows affected (0.00 sec) mysql> select * from performance_schema.persisted_variables; +-----------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +-----------------+----------------+ | max_connections | 151 | +-----------------+----------------+ 1 row in set (0.00 sec) mysql> show variables like '%max_connections%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_connections | 151 | | mysqlx_max_connections | 100 | +------------------------+-------+ 2 rows in set (0.01 sec)
4.join关联有几种类型
Join常用的有3种关联类型。
- inner join 内连接,只保留两张表中完全匹配的结果集;
- left join 会返回左表所有的行,即使在右表中没有匹配的记录;
- right join 会返回右表所有的行,即使在左表中没有匹配的记录;
三种连接如果结果相同,优先使用 inner join,如果使用 left join 左边表尽量小。
6.char 与 varchar2 的区别
- char的长度是固定的,而varchar2的长度是可以变化的。
比如,存储字符串“101”,对于char(10),表示你存储的字符将占 10 个字节(包括 7 个空字符),在数据库中它是以空格占位的,而同样的varchar2(10)则只占用 3 个字节的长度,10 只是最大值,当你存储的字符小于 10 时,按实际长度存储。
- char的效率比varchar2的效率稍高
- 何时用char,何时用varchar2?
char和varchar2是一对矛盾的统一体,两者是互补的关系,varchar2比char节省空间,在效率上比char会稍微差一点,既想获取效率,就必须牺牲一点空间,这就是我们在数据库设计上常说的 “以空间换效率”。