博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql面试知识点总结(基础篇)
阅读量:6243 次
发布时间:2019-06-22

本文共 4158 字,大约阅读时间需要 13 分钟。

1. SQL 的 select 语句完整的执行顺序

1、from 子句组装来自不同数据源的数据,所以为表创建别名,别的地方可以用;2、where 子句基于指定的条件对记录行进行筛选;3、group by 子句将数据划分为多个分组;4、使用聚集函数进行计算;    一定要知道他的执行顺序在group by后having之前5、使用 having 子句筛选分组;6、计算所有的表达式;7、select 的字段;8、使用 order by 对结果集进行排序

2. SQL 之连接查询(左连接和右连接的区别)

外连接:    左连接(左外连接):以左表作为基准进行查询,左表数据会全部显示出来,右表如果和左表匹配的数据则显示相应字段的数据,如果不匹配则显示为 null。    右连接(右外连接):以右表作为基准进行查询,右表数据会全部显示出来,左表如果和右表匹配的数据则显示相应字段的数据,如果不匹配则显示为 null。    全连接:先以左表进行左外连接,再以右表进行右外连接。内连接:    显示表之间有连接匹配的所有行。

3、Mysql 性能优化?

1、当只要一行数据时使用 limit 1查询时如果已知会得到一条数据,这种情况下加上 limit 1 会增加性能。因为 mysql 数据库引擎会在找到一条结果停止搜索,而不是继续查询下一条是否符合标准直到所有记录查询完毕。2、选择正确的数据库引擎Mysql 中有两个引擎 MyISAM 和 InnoDB,每个引擎有利有弊。MyISAM 适用于一些大量查询的应用,但对于有大量写功能的应用不是很好。甚至你只需要update 一个字段整个表都会被锁起来。而别的进程就算是读操作也不行要等到当前 update 操作完成之后才能继续进行。另外,MyISAM 对于 select count(*)这类操作是超级快的。InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用会比 MyISAM 还慢,但是支持“行锁”,所以在写操作比较多的时候会比较优秀。并且,它支持很多的高级应用,例如:事物。3. 用 not exists 代替 not inNot exists 用到了连接能够发挥已经建立好的索引的作用,not in 不能使用索引。Not in 是最慢的方式要同每条记录比较,在数据量比较大的操作红不建议使用这种方式。4. 对操作符的优化,尽量不采用不利于索引的操作符。如:in not in is null is not null <> 等某个字段总要拿来搜索,为其建立索引:Mysql 中可以利用 alter table 语句来为表中的字段添加索引,语法为:    alter table 表名 add index (字段名);5.分库分表,主从配置。6.对于多张大数据量(这里几百条就算大了)的表 JOIN,要先分页再 JOIN,否则逻辑读会很高,性能很差。7、存储过程执行比一条一条地执行其中的各条语句快8、决不要检索比需求还要多的数据10、导入数据前应该关闭自动提交,最好删除索引然后导入完成后新建11、索引改善数据检索的性能,但是损害了数据插入删除更新的性能12、like很慢,一般来说最好使用fulltext而不是like13、如果从一个表中删除大量数据,应该使用optimize table回收所用的空间,从而优化表性能14、char比varchar效率高很多,因此确定字符长度字段最好使用char字段

4、Mysql 存储引擎有哪些?

(1)、InnoDB 存储引擎    InnoDB 是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB 是默认的 MySQL引擎。(2)、MyISAM 存储引擎    MyISAM 基于 ISAM 存储引擎,并对其进行扩展。它是在 Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM 拥有较高的插入、查询速度,但不支持事物。(3)、MEMORY 存储引擎    MEMORY 存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。(4)、NDB 存储引擎    DB 存储引擎是一个集群存储引擎,类似于 Oracle 的 RAC,但它是 Share Nothing 的架构,因此能提供更高级别的高可用性和可扩展性。NDB 的特点是数据全部放在内存中,因此通过主键查找非常快。关于 NDB,有一个问题需要注意,它的连接(join)操作是在 MySQL 数据库层完成,不是在存储引擎层完成,这意味着,复杂的 join 操作需要巨大的网络开销,查询速度会很慢。

5、Mysql常用的存储引擎 InnoDB 对比MyISAM

InnoDB支持事务和外键,有独立的缓冲池,支持表锁,不存储表的总行数,比MyISAM插入效率高

6、事务的四大特征是什么?

只要满足一下四个特征的就属于事务,事务的四大特性ACID(原子性、一致性、隔离性、持久性)(1)、原子性:        事务中整个操作要么全部完成,要么全部不完成。(2)、一致性:        在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。(3)、隔离性:        事务间的操作互不干扰。(4)、持久性:        事务一旦完成,就永久保存。 mysql中关于事务的语句:        start trunsaction --开启事务        savepoint 保留点    --创建保留点(即:还原点)        rollback to 保留点  --回滚        commit    --提交 补充:        set autocommit=0 --设置mysql不自动提交更改        release 保留点 释放保留点

7、where在查询为空数据时不能使用==,应该书写成以下方式

select * from tablename where field is null

8、char类型支持的最大字节数是255,text约为64kb,MEDIUMTEXT约为16M,LONGTEXT约为4G

9、查询时exists适用于b表(在exists或者in中出现的)比A表大的情况,反之适用in
10、默认情况下decimal为10位无小数的整数,在使用过程中DECIMAL(M,D) ,如果M>D,为M+2否则为D+2
11、SQL分类

SQL全程为Structure Query Language(结构化查询语言)。SQL 语句主要可以划分为以下 3 个类别:1、DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、 数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter 等。2、DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、update 和 select 等。3、DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和 访问级别的语句。这些语句定义了数据库、表、字段、用户的访问

12、MySQL数据类型的选择和优化案例

1、手机号存储使用BIGINT代替CHAR或者VARCHAR存放手机号码。这是因为CHAR或者VARCHAR,占用空间大,影响查询性能。例如:11位手机号CHAR存储,utf8编码,则占用33个字节;使用如果使用INT的话,INT最大只能保存10为数据,而手机号为11位,会出现溢出,所以使用        BIGINT占用8个字节,支持11为数据存储。2、IP地址可以使用INT存储MySQL里提供了一个很好的函数:INET_ATON(),他负责把IP地址转化为数字,而另一个函数    INET_NTOA()负责将数字转化为IP地址,示例如下:注意:INT使用无符号,这是因为INT有符号最大为2147483647而无符号 最大为4294967295,如果使用有符号的话,会出现溢出,使用无符号则不会溢出。3、对于非负整数优先使用无符号整形存储4、避免使用enum类型,用TINYINT替代    修改值必须使用alter、排序的效率比较低、禁止使用数字作为enum枚举值5、使用timestamp(4字节)/datetime(8字节)存储日期时间    timestamp日期范围:1970-1-1 00:00:01----2038-01-10 03:14:07    timestamp以int存储,但可读性高6、尽可能把所有列定义为not null    索引null列会占用更多的空间    进行比较时需要作额外的处理

13、如何查看当前数据库的状态?

show status;

14、数据库报“Too many connections” 怎么办?

show full processlist;

15、如何查看索引是否有效?

在查询语句前加explain关键字,查看type类型是否为all,是则没有用到索引,否则使用了索引

16、group by使用规则

clipboard.png

17、union/union all使用规则

clipboard.png

18、视图的规则和限制

clipboard.png

图片都来自《Mysql必知必会》

19、更新时使用update ignore 可以忽略更新错误的行,执行正确更新的数据。

20、一些零碎的知识点

  1. 唯一索引和主键索引的区别:唯一索引可以为null
  2. 联接不是物理实体,在实际的数据库表中不存在,联结由mysql根据需要建立,它存在于查询的执行当中。
  3. and优先级高于or,多个or语句时,能够使用in替换的时候一定要使用in语句,执行效率更快
  4. mysql完全不区分大小写,使用binary建表的时候在字段后标识可以区分大小写,并且使用此函数也可以在查询时区分大小写
  5. 在查询时distinct关键字会应用于所有列而不是前置它的列

转载地址:http://cvpia.baihongyu.com/

你可能感兴趣的文章
linux 编写防火墙脚本
查看>>
方差分析库 ANOVA C++ (libANOVA)
查看>>
线程,进程和程序的简单比较
查看>>
Resetting warning light on AIX
查看>>
Java 实现文件随机读写-RandomAccessFile
查看>>
hdu2027 统计元音
查看>>
星巴克——最单纯的SNS应用
查看>>
spring配置线程池
查看>>
2016年2月5、6日:调研应用监控系统
查看>>
在eclipse中搭建咖啡兔的Activiti演示工程中的各种坑及其解决方法(kft-activiti-demo-no-maven)...
查看>>
我的友情链接
查看>>
简单易用的headless浏览器
查看>>
weka中使用liblinear
查看>>
获取url后面的参数
查看>>
网络超时检测的三种方法
查看>>
Add Two Numbers
查看>>
为什么你需要U-Mail邮件网关上万能安全锁
查看>>
JSON 官网中文
查看>>
解决ubuntu-supervisor-unix:var-run-supervisor.sock-no-such-file.的方法
查看>>
jQuery导航下拉滑动油漆刷墙效果
查看>>