1.什么是数据库?
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。mysql
2.如何查看某个操做的语法?
好比看建表的语法:面试
mysql> ? create table Name: 'CREATE TABLE' Description: Syntax: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,…) [table_options] [partition_options] CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,…)] [table_options] [partition_options] [IGNORE | REPLACE] [AS] query_expression CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
3.MySql的存储引擎有哪些?
MyISAM、 InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、 ARCHIVE、CSV、BLACKHOLE、FEDERATED。算法
Tips:InnoDB和BDB提供事务安全表,其余存储引擎都是非事务安全表。sql
4.经常使用的2种存储引擎?
1.Myisam是Mysql的默认存储引擎,当create建立新表时,未指定新表的存储引擎时,默认使用Myisam。数据库
每一个MyISAM 在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是 .frm (存储表定义) 、.MYD (MYData,存储数据)、.MYI (MYIndex,存储索引)。express
数据文件和索引文件能够放置在不一样的目录,平均分布io,得到更快的速度。缓存
2.InnoDB 存储引擎提供了具备提交、回滚和崩溃恢复能力的事务安全。可是对比 Myisam 的存储引擎,InnoDB 写的处理效率差一些而且会占用更多的磁盘空间以保留数据和索引。安全
6.能够针对表设置引擎吗?如何设置?
能够, ENGINE=xxx 设置引擎。性能优化
代码示例:服务器
create table person( id int primary key auto_increment, username varchar(32) ) ENGINE=InnoDB
6.选择合适的存储引擎?
选择标准: 根据应用特色选择合适的存储引擎,对于复杂的应用系统能够根据实际状况选择 多种存储引擎进行组合.
下面是经常使用存储引擎的适用环境:
- MyISAM: 默认的 MySQL 插件式存储引擎, 它是在 Web、 数据仓储和其余应用环境下最常使用的存储引擎之一。
- InnoDB:用于事务处理应用程序,具备众多特性,包括 ACID 事务支持。
- Memory: 将 全部数据保存在RAM 中, 在 须要快速查找引用和其余相似数据的环境下,可 提供极快的访问。
- Merge:容许 MySQL DBA 或开发人员将一系列等同的 MyISAM 表以逻辑方式组合在一块儿,并做为 1 个对象引用它们。对于诸如数据仓储等 VLDB 环境十分适合。
7.选择合适的数据类型
前提: 使用适合存储引擎。
选择原则: 根据选定的存储引擎,肯定如何选择合适的数据类型下面的选择方法按存储引擎分类 :
- MyISAM 数据存储引擎和数据列
MyISAM数据表,最好使用固定长度的数据列代替可变长度的数据列。 - MEMORY存储引擎和数据列
MEMORY数据表目前都使用固定长度的数据行存储,所以不管使用CHAR或VARCHAR列都没有关系。二者都是做为CHAR类型处理的。 - InnoDB 存储引擎和数据列
建议使用 VARCHAR类型
对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(全部数据行 都使用指向数据列值的头指针) ,所以在本质上,使用固定长度的CHAR列不必定比使 用可变长度VARCHAR列简单。 于是, 主要的性能因素是数据行使用的存储总量。 因为 CHAR 平均占用的空间多于VARCHAR,所以使用VARCHAR来最小化须要处理的数据行的存储总 量和磁盘I/O是比较好的。
8.char & varchar
保存和检索的方式不一样。它们的最大长度和是否尾部空格被保留等方面也不一样。在存储或检索过程当中不进行大小写转换。
9.Mysql字符集
mysql服务器能够支持多种字符集 (能够用show character set命令查看全部mysql支持 的字符集) ,在同一台服务器、同一个数据库、甚至同一个表的不一样字段均可以指定使用不 同的字符集。
mysql的字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。
10.如何选择字符集?
建议在可以彻底知足应用的前提下,尽可能使用小的字符集。由于更小的字符集意味着可以节省空间、 减小网络传输字节数,同时因为存储空间的较小间接的提升了系统的性能。
有不少字符集能够保存汉字,好比 utf八、gb23十二、gbk、latin1 等等,可是经常使用的是 gb2312 和 gbk。由于 gb2312 字库比 gbk 字库小,有些偏僻字(例如:洺)不能保存,所以 在选择字符集的时候必定要权衡这些偏僻字在应用出现的概率以及形成的影响, 不能作出肯 定答复的话最好选用 gbk。
11.什么是索引?
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的做用至关于图书的目录,能够根据目录中的页码快速找到所需的内容。
12.索引设计原则?
- 搜索的索引列,不 必定是所要选择的列。最适合索引的列是出如今WHERE子句中的列,或链接子句中指定的列,而不是出如今SELECT 关键字后的选择列表中的列。
- 使用唯一索引。考虑某列中值的分布。 对于唯一值的列,索引的效果最好,而具备多个 重复值的列,其索引效果最差。
- 使用短索引。若是对串列进行索引,应该指定一个前缀长度,只要有可能就应该这作样。 例如,若是有一个 CHAR(200) 列,若是在前 10 个或 20 个字符内,多数值是唯一的, 那么就不要对整个列进行索引。
- 利用最左前缀。在建立 一个 n 列的索引时,实际是建立了 MySQL 可利用的 n 个索引。 多列索引可起几个索引的做用,由于可利用索引中最左边的列集来匹配行。 这样的列集 称为最左前缀。 (这与索引一个列的前缀不一样,索引一个列的前缀是利用该的n前个字 符做为索引值 )
- 不要过分索引。每一个额外的索引都要占用额外的磁盘空间,并下降写操做的性能,这一点咱们前面已经介绍 过。在修改表的内容时,索引必须进行更新,有时可能须要重构, 所以, 索引越多,所花的时间越长。
若是有一个索引不多利用或从不使用,那么会没必要要地减缓表的修改速度。 此外,MySQL 在生成一个执行计划时,要考虑各个索引,这也要费时间。
建立多余的索引给查询优化带来了更多的工做。索引太多,也可能会使 MySQL选择不到所要使用的 最好索引。 只保持所需的索引有利于查询优化。 若是想给已索引的表增长索引, 应 该考虑所要增长的索引是不是现有多列索引的最左索引。 - 考虑在列上进行的比较类型。 索引可用于“ <”、“ < = ”、“ = ”、“ > =”、“ > ”和 BETWEEN 运算。在模式具备一个直接量前缀时,索引也用于 LIKE 运算。若是只将某个列用于其余类型的运算时(如 STRCMP( )) ,对其进行索引没有价值。
13.MySql有哪些索引?
- 数据结构角度
- BTREE
- HASH
- FULLTEXT
- R-Tree
- 物理存储角度
一、汇集索引(clustered index)
二、非汇集索引(non-clustered index)
- 从逻辑角度
- 普通索引:仅加速查询
- 惟一索引:加速查询 + 列值惟一(能够有null)
- 主键索引:加速查询 + 列值惟一(不能够有null)+ 表中只有一个
- 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
- 全文索引:对文本的内容进行分词,进行搜索
14.Hash索引和B+树索引的底层实现原理?
hash索引底层就是hash表,进行查询时,调用一次hash函数就能够获取到相应的键值,以后进行回表查询得到实际数据.
B+树底层实现原理是多路平衡查找树,对于每一次的查询都是从根节点出发,查询到叶子节点方能够得到所查键值,而后查询判断是否须要回表查询.
区别:
hash索引
1:hash索引进行等值查询更快(通常状况下)可是却没法进行范围查询.由于在hash索引中通过hash函数创建索引以后,索引的顺序与原顺序没法保持一致,不能支持范围查询.
2:hash索引不支持模糊查询以及多列索引的最左前缀匹配,由于hash函数的不可预测,eg:AAAA和AAAAB的索引没有相关性.
3:hash索引任什么时候候都避免不了回表查询数据.
4:hash索引虽然在等值上查询叫快,可是不稳定,性能不可预测,当某个键值存在大量重复的时候,发生hash碰撞,此时查询效率可能极差.
5:hash索引不支持使用索引进行排序,由于hash函数的不可预测.
B+树
1:B+树的全部节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也相似)天然支持范围查询.
2:在符合某些条件(聚簇索引,覆盖索引等)的时候能够只经过索引完成查询.不须要回表查询.
3:查询效率比较稳定,对于查询都是从根节点到叶子节点,且树的高度较低.
结论
大多数状况下,直接选择B+树索引能够得到稳定且较好的查询速度,而不须要使用Hash索引.
连接:https://blog.csdn.net/qq_44590469/article/details/97877397
15. 非聚簇索引必定会回表查询吗?
不必定,这涉及到查询语句所要求的字段是否所有命中了索引,若是所有命中了索引,那么就没必要再进行回表查询.
举个简单的例子,假设咱们在员工表的年龄上创建了索引,那么当进行select age from employee where age < 20
的查询时,在索引的叶子节点上,已经包含了age信息,不会再次进行回表查询.
16.如何查询最后一行记录?
select * from table_name order by id desc limit 1;
17.MySQL自增id不连续问题?
- 惟一键冲突
- 事务回滚
- 批量申请自增id的策略
18.sql注入问题?
缘由:用户传入的参数中注入符合sql的语法,从而破坏原有sql结构语意,达到攻击效果。
19.什么是3NF(范式)?
- 1NF 指的是数据库表中的任何属性都具备原子性的,不可再分解
- 2NF 是对记录的唯一性约束,要求记录有唯一标识,即实体的唯一性
- 3NF是对字段冗余性的约束,即任何字段不能由其余字段派生出来,它要求字段没有冗余
20. NULL和空串判断?
NULL值是没有值,,它不是空串。若是指定’’(两个单引号,其间没有字符),这在NOT NULL列中是容许的。空串是一个有效的值,它不是无值。
判断NULL须要用 IS NULL 或者 IS NOT NULL。
21.什么是事务?
能够用来维护数据库的完整性,它保证成批的MySQL操做要么彻底执行,要么彻底不执行。
22.事务4个特性?
事务是必须知足4个条件(ACID):
- **原子性 Atomicity:**一个事务中的全部操做,要么所有完成,要么所有不完成,最小的执行单位。
- **一致性 Consistency:**事务执行先后,都处于一致性状态。
- **隔离性 Isolation:**数据库容许多个并发事务同时对其数据进行读写和修改的能力,隔离性能够防止多个事务并发执行时因为交叉执行而致使数据的不一致。
- **持久性 Durability:**事务执行完成后,对数据的修改就是永久的,即使系统故障也不会丢失。
23.事务隔离级别分别是?
- READ_UNCOMMITTED
这是事务最低的隔离级别,它充许另一个事务能够看到这个事务未提交的数据。解决第一类丢失更新的问题,可是会出现脏读、不可重复读、第二类丢失更新的问题,幻读 。 - READ_COMMITTED
保证一个事务修改的数据提交后才能被另一个事务读取,即另一个事务不能读取该事务未提交的数据。解决第一类丢失更新和脏读的问题,但会出现不可重复读、第二类丢失更新的问题,幻读问题 - REPEATABLE_READ
保证一个事务相同条件下先后两次获取的数据是一致的 (注意是 一个事务,能够理解为事务间的数据互不影响)解决第一类丢失更新,脏读、不可重复读、第二类丢失更新的问题,但会出幻读。 - SERIALIZABLE
事务串行执行,解决了脏读、不可重复读、幻读。但效率不好,因此实际中通常不用。
24.InnoDB默认事务隔离级别?如何查看当前隔离级别
可重复读(REPEATABLE-READ)
查看:
mysql> select @@global.tx_isolation; +———————————+ | @@global.tx_isolation | +———————————+ | REPEATABLE-READ | +———————————+ 1 row in set, 1 warning (0.01 sec)
25.什么是锁?
数据库的锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性,这样才能保证在高并发的状况下,访问数据库的时候,数据不会出现问题。
26.死锁?
是指两个或两个以上进程执行过程当中,因竞争共享资源形成的相互等待现象。
27.如何处理死锁?
- 设置超时时间。超时后自动释放。
- 发起死锁检测,主动回滚其中一条事务,让其余事务继续执行。
28.如何建立用户?受权?
建立用户:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
受权:
GRANT privileges ON databasename.tablename TO 'username'@'host';
- username:用户名
- host:能够登录的主机地址。本地用户用localhost表示,任意远程主机用通配符%。
- password:登录密码,密码能够为空表示不须要密码登录服务器
- databasename: 数据库名称。
- tablename:表名称,*表明全部表。
29.如何查看表结构?
desc table_name;
mysql> desc zipkin_spans; +———————+———————+———+——+————+———+ | Field | Type | Null | Key | Default | Extra | +———————+———————+———+——+————+———+ | trace_id_high | bigint(20) | NO | PRI | 0 | | | trace_id | bigint(20) | NO | PRI | NULL | | | id | bigint(20) | NO | PRI | NULL | | | name | varchar(255) | NO | MUL | NULL | | | parent_id | bigint(20) | YES | | NULL | | | debug | bit(1) | YES | | NULL | | | start_ts | bigint(20) | YES | MUL | NULL | | | duration | bigint(20) | YES | | NULL | | +———————+———————+———+——+————+———+ 8 rows in set (0.01 sec)
30.Mysql删除表的几种方式?区别?
1.delete : 仅删除表数据,支持条件过滤,支持回滚。记录日志。所以比较慢。
delete from table_name;
2.truncate: 仅删除全部数据,不支持条件过滤,不支持回滚。不记录日志,效率高于delete。
truncate table table_name;
3.drop:删除表数据同时删除表结构。将表所占的空间都释放掉。删除效率最高。
drop table table_name;
31.like走索引吗?
Xxx% 走索引, %xxx不走索引。
32.什么是回表?
在普通索引查到主键索引后,再去主键索引定位记录。等于说非主键索引须要多走一个索引树。
33.如何避免回表?
索引覆盖被查询的字段。
34.索引覆盖是什么?
若是一个索引包含(或覆盖)全部须要查询的字段的值,称为‘覆盖索引’。
35.视图的优缺点?
优势
简单化,数据所见即所得
安全性,用户只能查询或修改他们所能见到获得的数据
逻辑独立性,能够屏蔽真实表结构变化带来的影响
缺点
性能相对较差,简单的查询也会变得稍显复杂
修改不方便,特变是复杂的聚合视图基本没法修改
36.主键和惟一索引区别?
本质区别,主键是一种约束,惟一索引是一种索引。
主键不能有空值(非空+惟一),惟一索引能够为空。
主键能够是其余表的外键,惟一索引不能够。
一个表只能有一个主键,惟一索引 能够多个。
均可以创建联合主键或联合惟一索引。
主键-》聚簇索引,惟一索引->非聚簇索引。
37.如何随机获取一条记录?
SELECT * FROM table_name ORDER BY rand() LIMIT 1;
38.Mysql中的数值类型?
39.查看当前表有哪些索引?
show index from table_name;
40.索引不生效的状况?
- 使用不等于查询
- NULL值
- 列参与了数学运算或者函数
- 在字符串like时左边是通配符.好比 %xxx
- 当mysql分析全表扫描比使用索引快的时候不使用索引.
- 当使用联合索引,前面一个条件为范围查询,后面的即便符合最左前缀原则,也没法使用索引.
41.MVVC?
MVCC 全称是多版本并发控制系统,InnoDB 的 MVCC 是经过在每行记录后面保存两个隐藏的列来实现,这两个列一个保存了行的建立时间,一个保存行的过时时间(删除时间)。固然存储的并非真实的时间而是系统版本号(system version number)。每开始一个新的事务,系统版本号都会自动新增,事务开始时刻的系统版本号会做为事务的版本号,用来查询到每行记录的版本号进行比较。
42.sql语句的执行流程?
客户端链接数据库,验证身份。
获取当前用户权限。
当你查询时,会先去缓存看看,若是有返回。
若是没有,分析器对sql作词法分析。
优化器对sql进行“它认为比较好的优化”。
执行器负责具体执行sql语句。
最后把数据返回给客户端。
43.如何获取select 语句执行计划?
explain sql;
44.explain列有哪些?含义?
1、 id
SQL查询中的序列号。
id列数字越大越先执行,若是说数字同样大,那么就从上往下依次执行。
2、select_type
3、table
显示这一行的数据是关于哪张表的。不必定是实际存在的表名。
能够为以下的值:
- <unionM,N>: 引用id为M和N UNION后的结果。
- : 引用id为N的结果派生出的表。派生表能够是一个结果集,例如派生自FROM中子查询的结果。
- : 引用id为N的子查询结果物化获得的表。即生成一个临时表保存子查询的结果。
4、type
这是最重要的字段之一,显示查询使用了何种类型。从最好到最差的链接类型依次为:
system,const,eq_ref,ref,fulltext,ref_or_null,index_merge,unique_subquery,index_subquery,range,index,ALL
一、system
表中只有一行数据或者是空表,这是const类型的一个特例。且只能用于myisam和memory表。若是是Innodb引擎表,type列在这个状况一般都是all或者index
二、const
最多只有一行记录匹配。当联合主键或惟一索引的全部字段跟常量值比较时,join类型为const。其余数据库也叫作惟一索引扫描
三、eq_ref
多表join时,对于来自前面表的每一行,在当前表中只能找到一行。这多是除了system和const以外最好的类型。当主键或惟一非NULL索引的全部字段都被用做join联接时会使用此类型。
eq_ref可用于使用’='操做符做比较的索引列。比较的值能够是常量,也能够是使用在此表以前读取的表的列的表达式。
相对于下面的ref区别就是它使用的惟一索引,即主键或惟一索引,而ref使用的是非惟一索引或者普通索引。
eq_ref只能找到一行,而ref能找到多行。
四、ref
对于来自前面表的每一行,在此表的索引中能够匹配到多行。若联接只用到索引的最左前缀或索引不是主键或惟一索引时,使用ref类型(也就是说,此联接可以匹配多行记录)。
ref可用于使用’=‘或’<=>'操做符做比较的索引列。
五、 fulltext
使用全文索引的时候是这个类型。要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql无论代价,优先选择使用全文索引
六、ref_or_null
跟ref类型相似,只是增长了null值的比较。实际用的很少。
七、index_merge
表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不一样的索引,官方排序这个在ref_or_null以后,可是实际上因为要读取多个索引,性能可能大部分时间都不如range
八、unique_subquery
用于where中的in形式子查询,子查询返回不重复值惟一值,能够彻底替换子查询,效率更高。
该类型替换了下面形式的IN子查询的ref:
value IN (SELECT primary_key FROM single_table WHERE some_expr)
九、index_subquery
该联接类型相似于unique_subquery。适用于非惟一索引,能够返回重复值。
十、range
索引范围查询,常见于使用 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN()或者like等运算符的查询中。
十一、index
索引全表扫描,把索引从头至尾扫一遍。这里包含两种状况:
一种是查询使用了覆盖索引,那么它只须要扫描索引就能够得到数据,这个效率要比全表扫描要快,由于索引一般比数据表小,并且还能避免二次查询。在extra中显示Using index,反之,若是在索引上进行全表扫描,没有Using index的提示。
十二、all
全表扫描,性能最差。
5、possible_keys
查询可能使用到的索引都会在这里列出来。
6、Key
key列显示MySQL实际使用的键(索引)
要想强制MySQL使用或忽视possible_keys列中的索引,可使用FORCE INDEX、USE INDEX或者IGNORE INDEX。
select_type为index_merge时,这里可能出现两个以上的索引,其余的select_type这里只会出现一个。
7、key_len
表示索引中使用的字节数。
key_len只计算where条件用到的索引长度,而排序和分组就算用到了索引,也不会计算到key_len中。
不损失精确性的状况下,长度越短越好 。
8、ref
表示上述表的链接匹配条件,即哪些列或常量被用于查找索引列上的值。
9、rows
rows 也是一个重要的字段。 这是mysql估算的须要扫描的行数(不是精确值)。
10、Extra
该列包含MySQL解决查询的详细信息,有如下几种状况:
- Using where:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的所有的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤。
- Using temporary:表示MySQL须要使用临时表来存储结果集,常见于排序和分组查询。
- Using filesort:MySQL中没法利用索引完成的排序操做称为“文件排序”。
- Using join buffer:改值强调了在获取链接条件时没有使用索引,而且须要链接缓冲区来存储中间结果。若是出现了这个值,那应该注意,根据查询的具体状况可能须要添加索引来改进能。
- Impossible where:这个值强调了where语句会致使没有符合条件的行。
- Select tables optimized away:这个值意味着仅经过使用索引,优化器可能仅从聚合函数结果中返回一行。
连接:https://www.jianshu.com/p/8fab76bbf448
45.MySql最多建立多少列索引?
16
46.为何最好创建一个主键?
主键是数据库确保数据行在整张表惟一性的保障,即便业务上本张表没有主键,也建议添加一个自增加的ID列做为主键.设定了主键以后,在后续的删改查的时候可能更加快速以及确保操做数据范围安全.
47.字段为何要求建议为not null?
MySQL官网这样介绍:
NULL columns require additional space in the rowto record whether their values are NULL. For MyISAM tables, each NULL columntakes one bit extra, rounded up to the nearest byte.
null值会占用更多的字节,且会在程序中形成不少与预期不符的状况.
48.varchar(10)和int(10)表明什么含义
varchar的10表明了申请的空间长度,也是能够存储的数据的最大长度,而int的10只是表明了展现的长度,不足10位以0填充.也就是说,int(1)和int(10)所能存储的数字大小以及占用的空间都是相同的,只是在展现时按照长度展现。
49.视图是什么?对比普通表优点?
视图(View)是一种虚拟存在的表,对于使用视图的用户来讲基本上是透明的。视图并 不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,而且是在使用视图时 动态生成的。
视图相对于普通的表的优点主要包括如下几项。
- 简单:使用视图的用户彻底不须要关心后面对应的表的结构、关联条件和筛选条件,
对用户来讲已是过滤好的复合条件的结果集。 - 安全:使用视图的用户只能访问他们被容许查询的结果集,对表的权限管理并不能
限制到某个行某个列,可是经过视图就能够简单的实现。 - 数据独立:一旦视图的结构肯定了,能够屏蔽表结构变化对用户的影响,源表增长
列对视图没有影响;源表修改列名,则能够经过修改视图来解决,不会形成对访问 者的影响。
50.count(*)在不一样引擎的实现方式?
MyISAM :把一个表的总行数存在了磁盘上,执行 count(*) 的时候会直接返回这个数,效率很高。
InnoDB : 比较麻烦,它执行 count(*) 的时候,须要把数据一行一行地从引擎里面读出来,而后累积计数。
参考:
- 《深刻浅出MySQL》
- 《高性能MySql》
- 《MySQL技术内幕(第5版)》
- 《MySQL必知必会》
- 极客时间:MySQL实战45讲
- 百度百科
0一、 MySQL 面试题集合总结
1.1 MySQL 面试题(基础部分):
- drop、truncate、 delete区别
- 数据库三范式是什么?
- union和union all有什么不一样?
- char、varchar二、varchar有什么区别?
- 合并查询有哪些?
- SQL语句执行顺序
- null的含义
- MySQL、SqlServer、oracle写出字符存储、字符串转时间
- update语句能够修改结果集中的数据吗?
- B树和B+树的区别
- 你建过索引吗? 建索引的原则
- 索引的类型, 如主键索引
- 查看SQL执行计划
- 有十万条数据, 写SQL语句查询其中某字段较大值的几条数据
- 子查询与关联查询的区别
- MySQL InnoDB、Mysaim的特色?
- 乐观锁和悲观锁的区别??
- 行锁和表锁的区别?
- 数据库隔离级别是什么?有什么做用?
- MySQL主备同步的基本原理。
- 如何优化数据库性能(索引、分库分表、批量操做、分页算法、升级硬盘SSD、业务优化、主从部署)
- SQL什么状况下不会使用索引(不包含,不等于,函数)
- 通常在什么字段上建索引(过滤数据最多的字段)
- MySQL,B+索引实现,行锁实现,SQL优化
- 如何解决高并发减库存问题
- 数据库事务的几种粒度
1.2 MySQL 面试题(实战部分):
- 数据库三范式,根据秒杀场景设计数据表
- 数据库的主从复制
- 死锁怎么解决
- mysql并发状况下怎么解决(经过事务、隔离级别、锁)
- 触发器的做用?
- 什么是存储过程?用什么来调用?
- 存储过程的优缺点?
- 存储过程与函数的区别
- 索引的做用?和它的优势缺点是什么?
- 什么样的字段适合建索引
- 索引类型有哪些?
- 什么是事务?什么是锁?
- 什么叫视图?游标是什么?
- 视图的优缺点
- 列举几种表链接方式,有什么区别?
- 主键和外键的区别?
- 在数据库中查询语句速度很慢,如何优化?
- 数据库三范式是什么?
- Varchar2和varchar有什么区别?
- Oracle和Mysql的区别?
- order by与group by的区别
1.3 MySQL 面试题(高级进阶部分):
- 请解释关系型数据库概念及主要特色?
- 请说出关系型数据库的典型产品、特色及应用场景?
- 请解释非关系型数据库概念及主要特色?
- 请说出非关系型数据库的典型产品、特色及应用场景?
- 请详细描述 SQL 语句分类及对应表明性关键字。
- 请详细描述 char(4)和 varchar(4)的差异。
- 如何受权 oldboy 用户从 172.16.1.0/24 访问数据库。
- 什么是 MySQL 多实例,如何配置 MySQL 多实例?
- 如何增强 MySQL 安全,请给出可行的具体措施?
- delete 和 truncate 删除数据的区别?
- MySQL Sleep 线程过多如何解决?
- sort_buffer_size 参数做用?如何在线修改生效?
- 如何在线正确清理 MySQL binlog?
- Binlog 工做模式有哪些?各什么特色,企业如何选择?
- 误操做执行了一个 drop 库 SQL 语句,如何完整恢复?
- mysqldump 备份使用了-A -B 参数,如何实现恢复单表?
- 详述 MySQL 主从复制原理及配置主从的完整步骤。
- 如何开启从库的 binlog 功能?
- MySQL 如何实现双向互为主从复制,并说明应用场景?
- MySQL 如何实现级联同步,并说明应用场景?
- MySQL 主从复制故障如何解决?
- 如何监控主从复制是否故障?
- MySQL 数据库如何实现读写分离?
- 生产一主多从从库宕机,如何手工恢复?
MySQL面试答案与解析:
02 关于MySQL 的实际使用
2.1 MySQL 性能优化的21个最佳实践
- 为查询缓存优化你的查询
- EXPLAIN 你的 SELECT 查询
- 当只要一行数据时使用 LIMIT 1
- 为搜索字段建索引
- 在 Join 表的时候使用至关类型的例,并将其索引
- 千万不要 ORDER BY RAND()
- 避免 SELECT *
- 永远为每张表设置一个 ID
- 使用 ENUM 而不是 VARCHAR
- 从 PROCEDURE ANALYSE() 取得建议
- 尽量的使用 NOT NULL
- Prepared Statements
- 无缓冲的查询
- 把 IP 地址存成 UNSIGNED INT
- 固定长度的表会更快
- 垂直分割
- 拆分大的 DELETE 或 INSERT 语句
- 越小的列会越快
- 选择正确的存储引擎
- 使用一个对象关系映射器(Object Relational Mapper)
- 当心“永久连接”
2.2 MySQL 性能调优与架构设计——全册
- 基础篇:
MySQLI基本介绍、MySQL架构组成、MySQL存储引擎简介、MySQL安全管理、MySQL备份与恢复
- 性能优化篇:
影响MySQLServer性能的相关因素、MySQI数据库锁定机制、MySQL数据库Query的优化、MySQL数据库Schema设计的性能优化、MySQLServer性能优化、经常使用存储引擎优化
- 架构设计篇:
MySQL可扩展设计的基本原则、可扩展性设计之MySQLReplication、可扩展性设计之数据切分、可扩展性设计之C ache与Se ar ch的利用、MySQLCluster、高可用设计之思路及方案、高可用设计之MySQL监控
2.3 MySQL从入门到项目实践
- 第1篇 基础知识
Hello MySQL、数据库初探、MySQL经常使用管理工具的使用、MySQL 数据库的基本操做
- 第2篇 核心应用
数据表的基本操做、MySQL视图、MySQL的数据类型和运算符、MySQL函数、MySQL 数据库查询语句详解、MySQL数据库的数据与索引操做、存储过程与存储函数、使用MySQL触发器
- 第3篇 核心技术
MySQL数据库的权限管理与恢复、MySQL数据库的复制、MySQL的日志管理、利用MySQL构建分布式应用、MySQL查询缓存、MySQL错误代码和消息的使用
- 第4篇 高级应用
在C#中实现MySQL数据库的链接、在Java中实现MySQL数据库的链接、在PHP中实现MySQL数据库的链接
- 第5篇 项目实战
项目实战统筹阶段——项目开发与规划、项目实战入门阶段——论坛管理系统数据库开发、项目实战提升阶段——企业会员管理系统数据库开发、项目实战高级阶段——新闻发布系统数据库开发
03 关于学习 MySQL的思惟脑图(Xmind)
MySQL 优化问题(Xmind)
事务、锁、sql优化原则、JION的原理、执行计划与执行明细、执行流程、表结构对性能的影响、索引
总结
总而言之,学习是本身的事,做为开发人员,MySQL是必需要掌握的,若是拥有大厂梦,基础可不能太差,若是你对MySQL还有不少不解问题,那么这份MySQL总结大礼包必定要拥有!
须要MySQL资料大礼包高清完整版的老铁请