面试题答案
一键面试配置调整
- 内存配置
- 增大
key_buffer_size
,它用于缓存索引块,对于 Aria 存储引擎,合适地增大此参数能加快索引查找速度,提升读写性能。例如,根据服务器内存情况,可适当将其设置为物理内存的 20% - 40%。 - 调整
aria_pagecache_buffer_size
,该参数控制 Aria 存储引擎的页面缓存大小,增加其值能让更多数据缓存于内存,减少磁盘 I/O。
- 增大
- 线程配置
- 合理设置
max_connections
,根据服务器硬件性能和预计的并发请求数,设置一个合适的值。若设置过小,会导致连接拒绝;过大则可能耗尽系统资源。 - 调整
thread_cache_size
,它决定了可缓存的线程数量,缓存线程可避免频繁创建和销毁线程的开销,提高响应速度。
- 合理设置
索引优化
- 复合索引
- 分析查询语句,将经常一起用于
WHERE
条件的列创建复合索引。例如,如果查询经常是WHERE col1 = 'value1' AND col2 = 'value2'
,则可创建包含col1
和col2
的复合索引(col1, col2)
,注意索引列顺序应按照查询中条件的使用频率和选择性从高到低排列。
- 分析查询语句,将经常一起用于
- 覆盖索引
- 尽量使用覆盖索引,即索引包含查询所需的所有列。这样查询时数据库无需回表操作,直接从索引中获取数据,能显著提升查询性能。例如,查询
SELECT col1, col2 FROM table WHERE col1 = 'value'
,若创建索引(col1, col2)
,就可能利用覆盖索引优化查询。
- 尽量使用覆盖索引,即索引包含查询所需的所有列。这样查询时数据库无需回表操作,直接从索引中获取数据,能显著提升查询性能。例如,查询
- 索引维护
- 定期使用
ANALYZE TABLE
语句,让 MariaDB 更新索引统计信息,使查询优化器能做出更准确的执行计划。
- 定期使用
缓存策略
- 查询缓存
- 开启 MariaDB 的查询缓存,通过设置
query_cache_type = 1
来启用,并合理设置query_cache_size
以指定缓存大小。查询缓存会缓存查询语句及其结果,当相同查询再次执行时,直接从缓存中返回结果,避免重复执行查询,提升响应速度。但需注意,数据更新操作会使相关缓存失效,所以在高并发读写场景下要权衡使用。
- 开启 MariaDB 的查询缓存,通过设置
- 应用层缓存
- 在应用层使用缓存,如 Memcached 或 Redis。对于读多写少的数据,可将查询结果缓存到这些缓存服务器中。应用程序先从缓存中读取数据,若缓存未命中,再查询数据库,并将结果写入缓存。这样可大大减轻数据库的读压力。
其他优化
- 读写分离
- 采用读写分离架构,使用主从复制。主库处理写操作,从库负责读操作。应用程序根据操作类型将请求分发到相应的库,从而减轻主库的读压力,提高整体性能。
- 优化 SQL 语句
- 避免使用
SELECT *
,明确指定所需列,减少数据传输量。 - 优化子查询,尽量将子查询改写为连接查询,以提高查询效率。
- 避免在索引列上使用函数或表达式,否则索引可能无法生效。
- 避免使用