vlambda博客
学习文章列表

面对这5道mysql优化方面面试题,你是否有很多问号?

1.MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。

b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。

c. mysql库主从读写分离。

d. 找规律分表,减少单表中的数据量提高查询速度。

e.添加缓存机制,比如memcached,apc等。

f. 不经常改动的页面,生成静态页面。

g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.


2.实践中如何优化MySQL

最好是按照以下顺序优化:

1.SQL语句及索引的优化

2. 数据库表结构的优化

3.系统配置的优化

4.硬件的优化

3.优化数据库的方法

  1. 选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL,例如’省份’、’性别’最好适用ENUM

  2. 使用连接(JOIN)来代替子查询

  3. 适用联合(UNION)来代替手动创建的临时表

  4. 事务处理

  5. 锁定表、优化事务处理

  6. 适用外键,优化锁定表

  7. 建立索引

  8. 优化查询语句

4.如何通俗地理解三个范式?

  • 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;

  • 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

  • 第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

范式化设计优缺点:

优点:可以尽量得减少数据冗余,使得更新快,体积小。

缺点:对于查询需要多个表进行关联,减少写得效率增加读得效率,更难进行索引优化。

反范式化:

优点:可以减少表得关联,可以更好得进行索引优化。

缺点:数据冗余以及数据异常,数据得修改需要更多的成本。

5.说说对SQL语句优化有哪些方法?(选择几条)

(1)Where子句中:where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.HAVING最后。

(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。

(3) 避免在索引列上使用计算。

(4)避免在索引列上使用IS NULL和IS NOT NULL。

(5)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

(6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。

(7)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。