问题:
- 索引
- 如何分区
- 数据库优化?
- 主从
- 如何读写分离
- 如何设计表,如日增百万
- sql的执行步骤
- 如何查看索引被使用
【干货】MySQL 5.7 多实例(多进程)配置教程 启动多个进程去取数据,实现并发。
mysql引擎:
如何设计表?
1、根据实际的产品设计
2、抽象
主表 辅表 主表
商品 关系表 品牌
第一范式 第二范式 (必须遵循)
第三范式 反范式
tinyint 类型,男女
smallint 端口
不要用ID作为用户ID,防止被猜出用户数量。
数据转换?
float单精度
bigint*1000,把小数点后三位算出来。
时间戳:1970-01-01
早期做国际化,用时间戳date_format()转化。
但是,生日怎么办? 用datetime
所有的时间类型,均设计为数字类型的。
枚举:ENUM()。
Connection Pool :类似php-fpm,检查连接最大数,用户名等
SQL Interface:SQL/视图等
Parser:检查语法错误
Optimizer:优化查询,判断是否使用索引,left join 可能会被替换为inner join (mysql的优化器做的并不够好)
Cache&buffer
Memory 内存级别
Merge 数据分表(鸡肋,底层使用的是myisam)
文件系统
1. MySQL的体系结构
- 什么是体系结构?
部件+联系(部件之间协同工作)
了解MySql必须牢牢记住其体系结构图,Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的。--------TechTarget中国原创内容,原文链接地址: http://www.searchdatabase.com.cn/showcontent_57918.htm -
MySQL的部件有哪些?
查看官方网站的逻辑架构图。
- 各个部件的执行顺序是什么?
2. MySQL的存储引擎
- 面试时,一般都会问到myisam和innodb两个存储引擎的区别,你是怎么回答的?
答:读操作多的时候用myisam,innodb支持事务,myisam不支持事务,或许还有别的吧?是不是感觉知道点,但是又没办法完全说清楚。 如果面试官在追问下,为什么myisam读的时候快呢?是不是觉得有点那什么~
这时候如果我们用类比的方法来比较,比如在问到人和人之间的区别是什么的时候,我们一般会从他们的年龄、性别、身高、性格、工作等方面来比较?
同样,myisam和innodb也有这样的类比因素或特征。
我们主要从数据类型、锁、索引、事务四个方面进行比较即可。
- 数据类型:基本一致,可不比较,但要了解在业务中存储字段时要选择合适的类型;
- 锁机制
- 索引
- 事务
下面会从锁、索引、事务三方面来讲myisam和innodb存储引擎的区别。
1、了解myisam存储引擎的 锁、索引、事务。
2、了解innodb存储引擎的 锁、索引、事务。
3、事务的隔离级别。
- read uncommitted (未提交读)
- read committed (提交读)
- repeatable read (可重复读)
- serializable(可串行化)
3. MySQL驱动与API
4. MySQL索引
5. SQL语句优化
问题:查询语句select * 比 select id 好吗?为什么?
这里需要了解sql查询语句的 "执行顺序"。比如下面这句,你觉得它的执行顺序是什么:
select * from user u left outer join group g on u.uid=g.uid where status=0 order by sortorder;