41.MySQL优化
-
开启查询缓存,优化查询
-
explain你的select查询,这可以帮你分析你的查询语句或是表结构的性能瓶颈。 EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的,你的数据表是如何被搜索 和排序的
-
当只要一行数据时使用limit 1,MySQL数据库引擎会在找到一条数据后停止搜索,而不 是继续往后查少下一条符合记录的数据
-
为搜索字段建索引
-
使用 ENUM 而不是 VARCHAR。如果你有一个字段,比如“性别”,“国家”,“民族”, “状态”或“部门”,你知道这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是VARCHAR
-
Prepared StatementsPrepared Statements很像存储过程,是一种运行在后台的SQL 语句集合,我们可以从使用 prepared statements 获得很多好处,无论是性能问题还是 安全问题。Prepared Statements 可以检查一些你绑定好的变量,这样可以保护你的程序不会受到 “SQL注入式”攻击
-
垂直分表
-
选择正确的存储引擎
42.key和index的区别
-
key 是数据库的物理结构,它包含两层意义和作用,一是约束(偏重于约束和规范数据 库的结构完整性),二是索引(辅助查询用的)。包括primary key, unique key, foreign key 等
-
index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间(mysql中 的innodb表空间)以一个类似目录的结构存储。索引要分类的话,分为前缀索引、全文 本索引等;
43.delete、truncate、drop区别
- truncate和delete只删除数据,不删除表结构 ,drop删除表结构,并且释放所占的空间。
- 删除数据的速度,drop> truncate > delete delete属于DML语言,需要事务管理,commit之后才能生效。
- drop和truncate属于 DDL语言,操作立刻生效,不可回滚。
- 使用场合: 当你不再需要该表时, 用 drop; 当你 仍要保留该表,但要删除所有记录时, 用 truncate; 当你要删除部分记录时(always with a where clause), 用 delete。
44.MySQL主从复制原理流程
- 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog 中;
- 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己 的relay log中;
- 从:sql执行线程——执行relay log中的语句;
45.自增主键最大ID记录,MyISAM和InnoDB分别是如何存储的
- MyISAM表把自增主键的最大ID记录到数据文件里
- InnoDB表把自增主键的最大ID记录到内存中
46.Mysql如何优化DISTINCT?
DISTINCT在所有列上转换为GROUP BY,并与ORDER BY子句结合使用。
47.解释MySQL外连接、内连接与自连接的区别
先说什么是交叉连接: 交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一个表的所有记录和另一个表中的所有记录一一匹配。
内连接则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合条件的记录不会出现在结果集中,即内连接只连接匹配的行。 外连接 其结果集中不仅包含符合连接条件的行,而且还会包括左表、右表或两个表中 的所有数据行,这三种情况依次称之为左外连接,右外连接,和全外连接。
左外连接,也称左连接,左表为主表,左表中的所有记录都会出现在结果集中,对于那些在右表中并没有匹配的记录,仍然要显示,右边对应的那些字段值以NULL来填充。右外连接,也 称右连接,右表为主表,右表中的所有记录都会出现在结果集中。左连接和右连接可以互换, MySQL目前还不支持全外连接。
48.一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录, 再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 15 ?
- 如果表的类型是 MyISAM,那么是 18因为 MyISAM 表会把自增主键的最大 ID 记录到数据文件里,重启 MySQL 自增主键的最大ID 也不会丢失
- 如果表的类型是 InnoDB,那么是 15InnoDB 表只是把自增主键的最大 ID 记录到内存中,所以重启数据库或者是对表进行OPTIMIZE 操作,都会导致最大 ID 丢失
49.Mysql 的技术特点是什么?
Mysql 数据库软件是一个客户端或服务器系统,其中包括:支持各种客户端程序和库的多线程 SQL 服务器、不同的后端、广泛的应用程序编程接口和管理工具。
50.Heap 表是什么?
HEAP 表存在于内存中,用于临时高速存储。
BLOB 或 TEXT 字段是不允许的
只能使用比较运算符=,<,>,=>,= <
HEAP 表不支持 AUTO_INCREMENT
索引不可为 NULL