1、MySQL 索引使用的注意事项

更新频繁的列不要加索引

数据量小的表不要加索引

重复数据多的字段不要加索引,比如性别字段

首先应该考虑对where 和 order by 涉及的列上建立索引

2、DDL、DML、DCL、DQL分别指什么

3、explain命令

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

示例:

explain select surname,first_name form a,b where a.id=b.id

type

本次查询表联接类型,从这里可以看到本次查询大概的效率

key

最终选择的索引,如果没有索引的话,本次查询效率通常很差

key_len

本次查询用于结果过滤的索引实际长度

rows

预计需要扫描的记录数,预计需要扫描的记录数越小越好

Extra

额外附加信息,主要确认是否出现 Using filesort、Using temporary 这两种情况

4、left join,right join,inner join

left join: 左连接,返回包括左表中所有记录和右表中连接字段相等的记录

right join:右连接,与左连接相反

inner join:内连接,只返回两表中连接字段相等的记录

5、数据库事物ACID

原子性、一致性、隔离性、持久性

6、事物的隔离级别

读未提交、读以提交、可重复读、可序列化读

7、脏读、幻读、不可重复读

脏读:事务A读到了事务B未提交的数据。

不可重复读:事务A第一次查询得到一行记录row1,事务B提交修改后,事务A第二次查询得到row1,但列内容发生了变化。

幻读:事务A第一次查询得到一行记录row1,事务B提交修改后,事务A第二次查询得到两行记录row1和row2。

6和7关系表

脏读

不可重复读

幻读

读未提交

可能出现

可能出现

可能出现

读提交

不会出现

可能出现

可能出现

重复读

不会出现

不会出现

可能出现

序列化

不会出现

不会出现

不会出现

如果数据库的隔离级别为(第一列),会出现的问题(第一行)

8、数据库的几大范式

第一范式:每一个属性都不能再分割,都是原子项。

第二范式:在满足第一范式的基础上,确保表中的每列都和主键相关

第三范式:在满足第二范式的基础上,确保每列都和主键列直接相关,而不是间接相关

参考:https://www.cnblogs.com/1906859953Lucas/p/8299959.html

9、数据库常见的命令

select update delete insert

10、说说分库分表设计

垂直分库,水平分表。

11、说说 SQL 优化之道

使用一切手段,避免全表扫描

参考:https://blog.csdn.net/wang1127248268/article/details/53413655

12、MySQL遇到的死锁问题、如何排查与解决

如何排查:查看数据库日志。

解决原则:

并发插入时,不在一个事务内进行再次事务提交。

改并发为串行执行。

查询数据库产生死锁的日志方式(以mysql为例):https://825635381.iteye.com/blog/2339503

13、存储引擎的 InnoDB与MyISAM区别,优缺点,使用场景

区别:

MyISAM是非事务安全型的,而InnoDB是事务安全型的。

MyISAM锁的粒度是表级,而InnoDB支持行级锁定。

MyISAM支持全文类型索引,而InnoDB不支持全文索引。

优缺点:

MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。

MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。

InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。

使用场景:

MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。(1)做很多count 的计算;(2)插入不频繁,查询非常频繁;(3)没有事务。

InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。(1)可靠性要求比较高,或者要求事务;(2)表更新和查询都相当的频繁,并且行锁定的机会比较大的情况。

14、索引类别(B+树索引、全文索引、哈希索引)、索引的原理

全文索引:将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。

哈希索引:

16、什么是自适应哈希索引(AHI)

InnoDB存储引擎会自动根据访问的频率和模式来自动地为某些热点页建立哈希索引。

17、为什么要用 B+tree作为MySQL索引的数据结构

1.文件很大,不可能全部存储在内存中,故要存储到磁盘上

2.索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(为什么使用B-/+Tree,还跟磁盘存取原理有关。)

3.局部性原理与磁盘预读,预读的长度一般为页(page)的整倍数,(在许多操作系统中,页的大小通常为4k)

4.数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入,(由于节点中有两个数组,所以地址连续)。而红黑树这种结构,h明显要深的多。由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性。

18、聚集索引与非聚集索引的区别

聚集索引:表记录的排列顺序和与数据的存储顺序一致(主键),一个表只能有一个,但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。 -->聚集索引规定了数据文件的存储顺序

非聚集索引:表记录的排列顺序和与数据的存储顺序不一致(唯一),一个表可以有多个。  -->是一个单独存放的指针表,用来快速找到对应点的地址

19、limit 20000 加载很慢怎么解决

参考:http://ourmysql.com/archives/1451

20、如何选择合适的分布式主键方案

参考:http://www.cnblogs.com/haoxinyue/p/5208136.html

这个博客中列举了几种常见生成主键的方式,并说明了其优缺点,可以根据实际情况选择主键生成方式。

21、选择合适的数据存储方案

关系型数据mysql Oracle

非关系型数据库redis、MongoDB

全文搜索引擎 ElasticSearch

22、常见的几种分布式ID的设计方案

UUID

通过redis生成唯一的id

java面试mysql数据库常见问题_JAVA面试常见问题之数据库篇相关推荐

  1. Java分析MySQL的数据结构_Java面试解析总结:Java+Redis+数据库+算法与数据结构+分布式...

    金九银十即将到来,给大家整理了今年来最经典的面试真题1000+道,每个题目都有详细的解答,收集了java基础.RabbitMQ,微服务.MySQL数据库.Java并发.JVM,Redis.设计模式,S ...

  2. 基于JAVA springboot + MYSQL +VUE的项目管理系统(含数据库),包括工时统计、原型预览、效果图管理等

    平台介绍 无鱼工时管理系统,是一款轻量级工时记录和管理工具,包括项目管理,工时上报,工时日报,工时统计等功能. 无鱼工时管理系统可通过员工工时上报的方式,来记录项目所花费的工时,帮助企业进行项目工时统 ...

  3. java 连接mysql工具类_java连接Mysql数据库的工具类

    一个封装好的链接Mysql数据库的工具类,可以方便的获取Connection对象关闭Statement.ResultSet.Statment对象等等 复制代码 代码如下: package myUtil ...

  4. java web 数据库操作_Java Web----Java Web的数据库操作(二)

    Java Web的数据库操作 三.JDBC操作数据库 上一篇介绍了JDBC API,之后就可以通过API来操作数据库,实现对数据库的CRUD操作了. 下面仅以示例 的方式对数据库操作进行说明 1. 添 ...

  5. java和连接数据库的驱动_java中连接各数据库的驱动类和连接方式

    1.JAVA连接ACCESS数据库 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url="jdbc:odb ...

  6. java获取mysql时间格式化_Java与mysql的时间格式化问题,获取时间的上下午

    Java与mysql的时间格式化问题,获取时间的上下午java 在项目中常常会遇到对时间进行格式化的问题,一次在对应用中发现,使用Java的SimpleDateFormat格式化时间,获取到的是上午, ...

  7. java的mysql语句规范_JAVA语言编程格式高级规范

    作为一位开发人员,都要有严格的代码规范.为此我总结了一些代码规范案例. 目 录 1. 前言 2. 试用范围 3. JAVA命名规范-- 3.1 公共约定 3.2 Java文件.包 3.3 类.接口命名 ...

  8. 2020年Java面试题及答案_Java面试宝典_Java笔试题(持续更新中)

    推荐面试视频教程 2019年最新Java互联网大厂面试精粹 前言 前言: 少年易老学难成,一寸光阴不可轻.未觉池塘春草梦,阶前梧叶已秋声 .-朱熹<劝学诗> 勤奋才是改变你命运的唯一捷径. ...

  9. java面试mysql的引擎_面试官:你用过mysql哪些存储引擎,请分别展开介绍一下

    这是高级开发者面试时经常被问的问题.实际我们在平时的开发中,经常会遇到的,在用SQLyog等工具创建表时,就有一个引擎项要你去选.如下图: Mysql的存储引擎有这么多种,实际我们在平时用的最多的莫过 ...

最新文章

  1. mfc让图片与按钮一起_微信朋友圈发图片还能添加语音,简单两步就能搞定!今天学到了...
  2. Effective C++ 的52个条款列表
  3. python与tensorflow的关系_Tensorflow GPU与CPU安装库的区别
  4. VTK:行军案用法实战
  5. 聊一聊 cookie
  6. ASP.NET MVC数据标记验证
  7. 一个华为设备防病毒 ACL 配置
  8. windows 网络编程大汇总
  9. cxf整合spring发布webservices服务端
  10. 域名注册网站服务比较
  11. Excel-DATEDIF函数计算两日期天数差
  12. Tips_linux
  13. HackerRank python练习——Quartiles
  14. 同步调用、异步调用、回调的简单理解
  15. mysql 回归分析_统计科学之多元回归分析
  16. __attribute__((__aligned__(n)))对结构体对齐的影响
  17. Python爬虫 | Python爬虫获取女友图片
  18. KCL 论文被 SETTA 2022 会议录用
  19. YOLOv5报错:OSError: cannot open resource
  20. ff14注册完服务器可以转,FF14怎么转服 FF14转服条件一览-游侠网

热门文章

  1. java 货币符号,java – Android货币符号排序
  2. mysql百万数据分区_mysql百万数据实践-分区
  3. 达梦数据库常用SQL之公共同义词改为私有同义词
  4. excel列转行(实用方法)
  5. 小米路由器-拨号入网
  6. 新基建时代,有些原则,你应该知道。
  7. 云服务器ECS安全组
  8. 国际:支持还是反对?对Java SE 7 语言的若干细微改进
  9. 电脑屏幕显示变得又大又模糊,修改分辨率
  10. android+6原生壁纸,福利:全新一加 6手机原生壁纸 安卓旗舰的魅力 让人一见倾心!...