一 问:有没有做过mysql优化方面的事情
1.查找定位慢查询,并优化
2.创建索引:创建合适的索引,我们就可以在索引中查询,查询以后直接找到对应的记录
3.分表:当一张表数据比较多或者一张表的某些字段值比较多并且很少使用时采用水平分表或垂直分表来优化
4.读写分离:当一台服务器不能满足需求是,采用读写而分离的方式进行集群
5.使用redis进行缓存
数据库表遵循范式
1nf::表的列具有原子性不可分解,即列的信息不可分解,只要是关系数据库就自动满足这个条件
2nf:表中记录是唯一的,通常我们设计一个主键来实现
3nf:表中不要有冗余数据,即表的信息既然能推导出来就不应该单独的设计一个字段来存放
反3nf:降低范式标准,增加字段,允许冗余
选择合适的存储引擎
常见的存储引擎有,MyiSam、innodb、memory
MyiSam:如果表对事务要求不高,以添加和查询为主,我们考虑使用myisam存储引擎。比如bbs中的,发帖表和2回复表
innodb:对事务要求高,保存数据都是重要数据,我们建议使用innodb,比如订单表,账号表
memory:我们数据变化频繁,不需要入库,同时又频繁的查询和修改我们考虑使用memory,速度更快
MyiSam和innodb的区别
1.事务安全:MyiSam不支持事务,innodb支持
2.查询和添加速度:myisam不支持事务所以不用考虑同步锁,查找和添加的速度快
3.支持全文索引:myisam支持,innodb不支持
4.锁机制:myisam支持表锁,innodb支持行锁
5外键:myisam不支持外键,innodb支持外键(通常不设置外键,一般在程序中保证数据的一致性)
创建合适的索引
索引(index)是帮助DBMS高效获取数据的数据结构
分类:普通索引、唯一索引、主键索引、全文索引
普通索引:允许重复的值出现
唯一索引:除了不允许有其他重复的记录出现外,其他的和普通索引一样(如,用户名,身份证,email,tell)
主键索引:是随着设定的主键而创建的,也就是说把某个列设为主键的时候,数据库就会给该列创建索引,这就是主键索引,唯一没有null值
全文索引:用来对表中的文本域(char,varchar,text)进行索引,全文索引针对myisam,explain select * from articles where match(title,body) against('database');【会使用全文索引】