每天5道Java面试题 -4(MySQL)

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的好处之一

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

差点资深程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值