当前位置: 首页 > article >正文

MySql面试宝典【刷题系列】

文章目录

      • 一、Mysql 的存储引擎 myisam 和 innodb 的区别。
      • 二、MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
      • 三、对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?
      • 四、锁的优化策略
      • 五、索引的底层实现原理和优化
      • 六、 什么情况下设置了索引但无法使用
      • 七、实践中如何优化MySQL
      • 八、SQL注入漏洞产生的原因?如何防止?
      • 九、索引的目的是什么?
      • 十、索引对数据库系统的负面影响是什么?
      • 十一、为数据表建立索引的原则有哪些?
      • 十二、什么情况下不宜建立索引?
      • 十三、主键、外键和索引的区别?


在这里插入图片描述

一、Mysql 的存储引擎 myisam 和 innodb 的区别。

答:

  1. MyISAM 是非事务的存储引擎,适合用于频繁查询的应用。表锁,不会出现死锁,适合小数据,小并发。

  2. innodb 是支持事务的存储引擎,合于插入和更新操作比较多的应用,设计合理的话是行锁(最大区别就在锁的级别上),适合大数据,大并发。

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

答:

  1. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
  2. 选择合适的表字段数据类型和存储引擎,适当的添加索引。
  3. mysql库主从读写分离。
  4. 找规律分表,减少单表中的数据量提高查询速度。
  5. 添加缓存机制,比如 memcachedapc 等。
  6. 不经常改动的页面,生成静态页面。
  7. 书写高效率的 SQL。比如
SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE

三、对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?

答:

  1. 确认服务器是否能支撑当前访问量。
  2. 优化数据库访问。
  3. 禁止外部访问链接(盗链), 比如图片盗链。
  4. 控制文件下载。
  5. 使用不同主机分流。
  6. 使用浏览统计软件,了解访问量,有针对性的进行优化。

四、锁的优化策略

答:

  1. 读写分离
  2. 分段加锁
  3. 减少锁持有的时间4
  4. 多个线程尽量以相同的顺序去获取资源

五、索引的底层实现原理和优化

答:B+ 树,经过优化的 B+

主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此InnoDB建议为大部分表使用默认自增的主键作为主索引。

六、 什么情况下设置了索引但无法使用

答:

  1. “%” 开头的 LIKE 语句,模糊匹配
  2. OR 语句前后没有同时使用索引
  3. 数据类型出现隐式转化(如 varchar 不加单引号的话可能会自动转换为 int 型)

七、实践中如何优化MySQL

答:

  1. SQL语句及索引的优化
  2. 数据库表结构的优化
  3. 系统配置的优化
  4. 硬件的优化

八、SQL注入漏洞产生的原因?如何防止?

答:

  1. SQL注入产生的原因:程序开发过程中不注意规范书写 sql 语句和对特殊字符进行过滤,导致客户端可以通过全局变量 POSTGET 提交一些 sql 语句正常执行。

  2. 防止SQL注入的方式

    • 开启配置文件中的 magic_quotes_gpcmagic_quotes_runtime 设置
    • 执行 sql 语句时使用 addslashes 进行 sql 语句转换
    • Sql语句书写尽量不要省略双引号和单引号。
    • 过滤掉sql语句中的一些关键词:update、insert、delete、select、 *
    • 提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。
    • Php 配置文件中设置 register_globalsoff ,关闭全局变量注册
    • 控制错误信息,不要在浏览器上输出错误信息,将错误信息写到日志文件中。

九、索引的目的是什么?

答:

  1. 快速访问数据表中的特定信息,提高检索速度
  2. 创建唯一性索引,保证数据库表中每一行数据的唯一性。
  3. 加速表和表之间的连接
  4. 使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

十、索引对数据库系统的负面影响是什么?

答:
负面影响: 创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度。

十一、为数据表建立索引的原则有哪些?

答:

  1. 在最频繁使用的、用以缩小查询范围的字段上建立索引。
  2. 在频繁使用的、需要排序的字段上建立索引

十二、什么情况下不宜建立索引?

答:

  1. 对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引。
  2. 对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等

十三、主键、外键和索引的区别?

答:主键、外键和索引的区别

定义

  • 主键–唯一标识一条记录,不能有重复的,不允许为空
  • 外键–表的外键是另一表的主键, 外键可以有重复的, 可以是空值
  • 索引–该字段没有重复值,但可以有一个空值

作用

  • 主键–用来保证数据完整性
  • 外键–用来和其他表建立联系用的
  • 索引–是提高查询排序的速度

个数

  • 主键–主键只能有一个
  • 外键–一个表可以有多个外键
  • 索引–一个表可以有多个唯一索引

http://www.kler.cn/a/557904.html

相关文章:

  • 审计级别未启用扩展模式导致查询 DBA_AUDIT_TRAIL 时 SQL_TEXT 列为空
  • C++ 设计模式-状态模式
  • 【Python爬虫(41)】消息队列:分布式爬虫的“智慧中枢”
  • 将产品照片(form.productPhotos)转为 JSON 字符串发送给后端
  • 学习笔记-沁恒第五讲-米醋
  • 如何在 Ubuntu 上安装和使用 Podman ?
  • Zookeeper应用案例-分布式锁-实现思路
  • My second Android application
  • CellChat前沿:spaCI:通过自适应图模型破译空间蜂窝通信
  • 位运算实用技巧与LeetCode实战
  • Linux系统使用Docker部署Geoserver并做数据挂载进行地图服务的发布和游览
  • 大模型——使用 Redis 和 Spring AI 创建 RAG(检索增强生成)应用
  • 什么是“可迭代”
  • 深入理解设计模式之外观模式
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(十八)-倍数问题、距离
  • MySQL | MySQL库、表的基本操作01
  • 如何对比软件需求做的是否合格?
  • nlp 自然语言处理+bert model +问答系统 question answer system(python 完整代码)
  • 豪越科技消防安全重点单位管理:从传统到数字化的跨越
  • (java/Spring boot)使用火山引擎官方推荐方法向大模型发送请求