1.实践中如何优化MySQL?
按照以下顺序优化:
SQL语句及索引的优化
数据库表结构的优化
系统配置的优化
硬件的优化
2.优化数据库的方法
1)选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置成NOTNULL,例如“省份”、“性别”最好使用ENUM
2)使用连接(JOIN)来代替子查询
3)使用联合(UNION)来代替手动创建的临时表
4)事务处理
5)锁定表,优化事务处理
6)使用外键,优化锁定表
7)建立索引
8)优化查询语句
3.唯一索引比普通索引快吗,为什么?
唯一索引不一定比普通索引快,还可能慢
查询时,在未使用limit 1的情况下,在匹配到一条数据后,唯一索引即返回,普通索引会继续匹配下一条数据,发现不匹配后返回,如此看来唯一索引少了一次匹配,但实际上这个消耗微乎其微
更新时,这个情况就比较复杂了,普通索引将记录放到change buffer中语句就执行完毕了,而对唯一索引而言,它必须要校验唯一性。因此,必须将数据页读入内存确定没有冲突,然后才能继续操作,对于写多读少的情况,普通索引利用change buffer 有效减少了对此盘的访问速度,因此普通索引性能要高于唯一索引
4.简单说一下数据库范式
第一范式:属性不可再分
第二范式:在一范式的基础上,要求数据库表中的每个实例或行必须可以被唯一的区分,通常需要为表加上一个列,以储存各个实例的唯一标识,这个唯一属性列被称为主关键字或者主键。
第三范式:在二范式的基础上,要求一个数据库表中不包含已在其他表中已包含的非主关键字信息,所以第三范式有以下特征:
1)每一列只有一个值
2)每一行都能区分
3)每一个表都不包含其他表已经包含的非主关键字信息
5.一千万条数据的表,如何分页查询?
数据量过大的情况下,limit offset分页会由于扫描数据太多而越往后查询越慢,可以配合当前页最后一条ID进行查询
SELETE * FROM TABLE WHERE ID > #{ID} LIMIT #{LIMIT}
当然,这种情况下ID必须是有序的,这也是有序ID的好处之一