- MySQL高性能索引
- SQL语句
- MySQL查询优化
- MySQL高扩展高可用
- MySQL安全性
问题1:char、varchar的区别是什么?
varchar是变长而char的长度是固定的。若是你的内容是固定大小的,你会获得更好的性能。mysql
问题2: TRUNCATE和DELETE的区别是什么?
DELETE命令从一个表中删除某一行,或多行,TRUNCATE命令永久地从表中删除每一行。程序员
问题3:什么是触发器,MySQL中都有哪些触发器?
触发器是指一段代码,当触发某个事件时,自动执行这些代码。在MySQL数据库中有以下六种触发器:面试
问题4:FLOAT和DOUBLE的区别是什么?sql
问题5:如何在MySQL种获取当前日期?数据库
SELECT CURRENT_DATE();
问题6:如何查询第n高的工资?安全
SELECT DISTINCT(salary) from employee ORDER BY salary DESC LIMIT n-1,1
问题7:请写出下面MySQL数据类型表达的意义(int(0)、char(16)、varchar(16)、datetime、text)服务器
此题考察的是MySQL数据类型。MySQL数据类型属于MySQL数据库基础,由此延伸出的知识点还包括以下内容:数据结构
数据类型考点:并发
一、整数类型,
包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别表示1字节、2字节、3字节、4字节、8字节整数。任何整数类型均可以加上UNSIGNED属性,表示数据是无符号的,即非负整数。 长度:
整数类型能够被指定长度,例如:INT(11)表示长度为11的INT类型。长度在大多数场景是没有意义的,它不会限制值的合法范围,只会影响显示字符的个数,并且须要和UNSIGNED ZEROFILL属性配合使用才有意义。 例子,
假定类型设定为INT(5),属性为UNSIGNED ZEROFILL,若是用户插入的数据为12的话,那么数据库实际存储数据为00012。二、实数类型,
包括FLOAT、DOUBLE、DECIMAL。 三、字符串类型,
包括VARCHAR、CHAR、TEXT、BLOB 使用策略:
对于常常变动的数据来讲,CHAR比VARCHAR更好,由于CHAR不容易产生碎片。
对于很是短的列,CHAR比VARCHAR在存储空间上更有效率。
使用时要注意只分配须要的空间,更长的列排序时会消耗更多内存。
尽可能避免使用TEXT/BLOB类型,查询时会使用临时表,致使严重的性能开销。函数
四、枚举类型(ENUM),
把不重复的数据存储为一个预约义的集合。 五、日期和时间类型,
尽可能使用timestamp,空间效率高于datetime, 答:int(0)表示数据是INT类型,长度是0、char(16)表示固定长度字符串,长度为1六、varchar(16)表示可变长度字符串,长度为1六、datetime表示时间类型、text表示字符串类型,能存储大字符串,最多存储65535字节数据)
常见操做
-u:指定用户名
-p:指定密码
-h:主机
-P:端口
G:打印结果垂直显示
c:取消当前MySQL命令
q:退出MySQL链接
s:显示服务器状态
h:帮助信息
d:改变执行符
一、InnoDB存储引擎,
二、MyISAM存储引擎,
三、其余表引擎,
Archive、Blackhole、CSV、Memory
使用策略
在大多数场景下建议使用InnoDB存储引擎。
表锁是平常开发中的常见问题,所以也是面试当中最多见的考察点,当多个查询同一时刻进行数据修改时,就会产生并发控制的问题。共享锁和排他锁,就是读锁和写锁。
使用策略
提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程。
使用场景
问题8:请说明InnoDB和MyISAM的区别
问题9:innodb引擎的特性
问题10:请列举3个以上表引擎
InnoDB、MyISAM、Memory
问题11:请说明varchar和text的区别
问题11:varchar(50)中50的含义
最多存放50个字符,varchar(50)和(200)存储hello所占空间同样,但后者在排序时会消耗更多内存,由于order by col采用fixed_length计算col长度(memory引擎也同样)。
问题12:int(20)中20的含义
是指显示字符的长度,不影响内部存储,只是当定义了ZEROFILL时,前面补多少个 0
问题13:简单描述MySQL中,索引,主键,惟一索引,联合索引的区别,对数据库的性能有什么影响?
此真题主要考察的是MySQL索引的基础和类型,由此延伸出的知识点还包括以下内容:
索引的基础
建立索引的语法:
索引对性能的影响:
索引的使用场景:
索引的类型:
索引不少种类型,是在MySQL的存储引擎实现的。
索引的区别:
-一个表只能有一个主键索引,可是能够有多个惟一索引。
MySQL索引的建立原则
MySQL索引的注意事项
一、联合索引遵循前缀原则
KEY(a,b,c)WHERE a = 1 AND b = 2 AND c = 3WHERE a = 1 AND b = 2WHERE a = 1#以上SQL语句能够用到索引WHERE b = 2 AND c = 3WHERE a = 1 AND c = 3#以上SQL语句用不到索引
二、LIKE查询,%不能在前
WHERE name LIKE "%wang%"#以上语句用不到索引,能够用外部的ElasticSearch、Lucene等全文搜索引擎替代。
三、列值为空(NULL)时是可使用索引的,但MySQL难以优化引用了可空列的查询,它会使索引、索引统计和值更加复杂。可空列须要更多的储存空间,还须要在MySQL内部进行特殊处理。
四、若是MySQL估计使用索引比全表扫描更慢,会放弃使用索引,例如:
表中只有100条数据左右。对于SQL语句WHERE id > 1 AND id < 100,MySQL会优先考虑全表扫描。
五、若是关键词or前面的条件中的列有索引,后面的没有,全部列的索引都不会被用到。
六、列类型是字符串,查询时必定要给值加引号,不然索引失效,例如:
列name varchar(16),存储了字符串"100"
WHERE name = 100;
以上SQL语句能搜到,但没法用到索引。
MySQL索引的原理
注:B+ 树是一种树数据结构,是一个n叉排序树,每一个节点一般有多个孩子,一棵B+树包含根节点、内部节点和叶子节点。根节点多是一个叶子节点,也多是一个包含两个或两个以上孩子节点的节点。B+ 树一般用于数据库和操做系统的文件系统中。NTFS, ReiserFS, NSS, XFS, JFS, ReFS 和BFS等文件系统都在使用B+树做为元数据索引。B+ 树的特色是可以保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+ 树元素自底向上插入。
InnoDB经过主键聚簇数据,若是没有定义主键,会选择一个惟一的非空索引代替,若是没有这样的索引,会隐式定义个主键做为聚簇索引。
下图形象说明了聚簇索引表(InnoDB)和普通的堆组织表(MyISAM)的区别:
最常问的MySQL面试题三——每一个开发人员都应该知道
对于普通的堆组织表来讲(右图),表数据和索引是分别存储的,主键索引和二级索引存储上没有任何区别。
而对于聚簇索引表来讲(左图),表数据是和主键一块儿存储的,主键索引的叶结点存储行数据,二级索引的叶结点存储行的主键值。
聚簇索引表最大限度地提升了I/O密集型应用的性能,但它也有如下几个限制:
二级索引的叶节点存储的是主键值,而不是行指针,这是为了减小当出现行移动或数据页分裂时二级索引的维护工做,但会让二级索引占用更多的空间。
在一些MySQL索引基础考题中,咱们能够轻松的经过索引基础和类型来解决此类问题,对于一些索引建立注意事项方面的考点,咱们能够经过索引建立原则和注意事项来解决。
问题14:建立MySQL联合索引应该注意什么?
需遵循前缀原则
问题15:列值为NULL时,查询是否会用到索引?
在MySQL里NULL值的列也是走索引的。固然,若是计划对列进行索引,就要尽可能避免把它设置为可空,MySQL难以优化引用了可空列的查询,它会使索引、索引统计和值更加复杂。
_问题16:如下语句是否会应用索引:SELECT_FROM users WHERE YEAR(adddate) < 2007;*
不会,由于只要列涉及到运算,MySQL就不会使用索引。
问题17:MyISAM索引实现?
MyISAM存储引擎使用B+Tree做为索引结构,叶节点的data域存放的是数据记录的地址。MyISAM的索引方式也叫作非聚簇索引的,之因此这么称呼是为了与InnoDB的聚簇索引区分。
问题17:MyISAM索引与InnoDB索引的区别?
问题18:如下三条sql 如何建索引,只建一条怎么建?
WHERE a=1 AND b=1WHERE b=1WHERE b=1 ORDER BY time DESC
以顺序b,a,time创建联合索引,CREATE INDEX table1_b_a_time ON index_test01(b,a,time)。由于最新MySQL版本会优化WHERE子句后面的列顺序,以匹配联合索引顺序。
问题19:有A(id,sex,par,c1,c2),B(id,age,c1,c2)两张表,其中A.id与B.id关联,如今要求写出一条SQL语句,将B中age>50的记录的c1,c2更新到A表中同一记录中的c1,c2字段中
考点分析
这道题主要考察的是MySQL的关联UPDATE语句
延伸考点:
UPDATE A,B SET A.c1 = B.c1, A.c2 = B.c2 WHERE A.id = B.idUPDATE A INNER JOIN B ON A.id=B.id SET A.c1 = B.c1,A.c2=B.c2再加上B中age>50的条件:UPDATE A,B set A.c1 = B.c1, A.c2 = B.c2 WHERE A.id = B.id and B.age > 50;UPDATE A INNER JOIN B ON A.id = B.id set A.c1 = B.c1,A.c2 = B.c2 WHERE B.age > 50