请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 317|回复: 0

字节跳动数据库面试题及答案(二)

[复制链接]

2775

主题

3174

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
11260
发表于 2021-9-8 10:41:54 | 显示全部楼层 |阅读模式
本帖最后由 chaomeili 于 2021-9-8 10:43 编辑

    Mysql 索引重建
  1.mysqldump导出然后重新导入,drop index + recreate index
  2.alter table xxx ENGINE = InnoDB
  3.repaire table xxx,这种对于InnoDB的无效
  4.OPTIMIZE TABLE xxx
  对于多列索引,哪些情况下能用到索引,哪些情况用不到索引
  1.like以%开头。
  2.or查询,必须左右字段都是索引,否则索引失效。
  3.联合索引,遵从最左匹配原则,如果不是使用第一列索引,索引失效。
  4.数据出现隐形转换,如varchar字段没加单引号,自动转为int类型,会使索引失效。
  5.索引字段使用not、<>、!=,索引失效。
  6.索引字段使用函数,索引无效。
  为什么使用数据库索引可以提高效率,在什么情况下会用不到数据库索引?
  默认执行SQL语句是进行全表扫描,遇到匹配条件的就加入搜索结果合集。如果有索引,就会先去索引表中一次定位到特定值的行数,减少遍历匹配的行数。索引把无序的数据变成了相对有序的数据结构。
       共享锁和排他锁的使用场景
  更新、新增、删除默认加排它锁,查询默认不加锁。
  共享锁,使用语法select * from tb lock in share mode,自身可以读,其他事务也可以读(也可以继续加共享锁),但是其他事务无法修改。
  排它锁,适用语法select * from tb for update,自身可以进行增删改查,其他事务无法进行任何操作。
  关系型数据库和非关系数据库的优缺点
  关系型数据库
  优点:
  · 二维表格,容易理解
  · 操作方便
  · 易于维护
  · 支持SQL
  缺点:
  · 读写性能较差
  · 固定的表结构,不够灵活
  · 应对高并发场景,磁盘I/O存在瓶颈
  · 海量数据的读写性能差
  非关系型数据库
  优点:
  · 不需要SQL解析,读写性能高
  · 可以使用硬盘或者内存作为载体,速度快
  · 基于键值对,数据没有耦合性,方便扩展
  · 部署简单
  缺点:
  · 不支持SQL,增加了学习成本
  · 没有事务
  Mysql 什么情况会造成慢查,如何查看慢查询
  响应时间超过阈值会产生慢查询日志。一般有以下情况会造成查询慢。
  1.没有设置索引,或查询没有用到索引
  2.I/O吞吐量过小
  3.内存不足
  4.网络速度慢
  5.查询的数据量过大
  6.锁或者死锁
  7.返回了不必要的行或列
  8.查询语句存在问题,需要优化
  慢查询日志默认是关闭的,如果非必要,不要开启,会影响性能。
  1.        使用SHOW VARIABLES LIKE 'slow_query%';
  2.   slow_query_log,慢查询开启关闭状态
  3.   slow_query_log_file,慢查询日志存储位置,用文本编辑器打开存储位置的文件,查询慢查询
复制代码

      如何处理慢查询,你一般是怎么处理慢查询的
  1.把数据、日志、索引放到不同的I/O设备上,增加读取速度。
  2.纵向、横向分割表,减少表的尺寸。
  3.升级硬件。
  4.根据查询条件,建立索引,索引优化。
  5.提高网速。
  6.扩大服务器内存。
  7.分库分表。

       Mysql 中 varchar 和 char 的区别
  varchar会根据存储的内容改变长度,char是定长,如果长度不够,则使用空格补齐。
  数据库外键的优缺点
  优点:
  · 能最大限度的保证数据的一致性和完整性
  · 增加ER图的可读性
  缺点:
  · 影响数据操作的效率
  · 增加开发难度,导致表过多
  有没有使用过数据库的视图
  使用create view view_name as select * from tb创建视图。
  使用select * from view_name正常查询视图。
  Mysql 中插入数据使用自增 id 好还是使用 uuid,为什么?
  1.单实例或单节点组,不担心网络爬虫获取数据量,推荐使用自增id,性能更好。
  2.分布式场景。20个节点下的小规模分布式场景,推荐uuid。20~200个节点的中规模分布式场景,推荐自增id+步长的策略。200以上节点,推荐推特雪花算法的全局自增ID。
  Mysql 有哪些数据类型,使用的时候有没有什么注意点
  · 整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、INT、BIG INT
  · 浮点数类型:FLOAT、DOUBLE、DECIMAL
  · 字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、MEDIUM BLOB、LONG BLOB
  · 日期类型:Date、DateTime、TIMESTAMP、TIME、YEAR
  · 使用的时候建议遵循从小原则。
  · 使用char和vahrchar的时候,注意char会去掉字符串末尾的空格
  · 使用text和blob的时候,注意定期清理碎片空间,使用OPTIMIZE TABLE命令
  · 浮点数会造成精度丢失,尽量使用定点数DECIMAL

        (未完待续)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

GMT+8, 2022-6-29 14:03 , Processed in 0.040754 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表