表的设计合理化(符合3NF)mysql
添加适当索引(index) [四种: 普通索引、主键索引、惟一索引unique、全文索引]sql
SQL语句优化数据库
分表技术(水平分割、垂直分割)编程
读写[写: update/delete/add]分离缓存
存储过程 [模块化编程,能够提升速度]安全
对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ]服务器
mysql服务器硬件升级session
定时的去清除不须要的数据,定时进行碎片整理(MyISAM)架构
为了创建冗余较小、结构合理的数据库,设计数据库时必须遵循必定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须知足必定的范式。并发
第一范式:1NF是对属性的原子性约束,要求属性(列)具备原子性,不可再分解;(只要是关系型数据库都知足1NF)
第二范式:2NF是对记录的唯一性约束,表中的记录是惟一的, 就知足2NF, 一般咱们设计一个主键来实现,主键不能包含业务逻辑。
第三范式:3NF是对字段冗余性的约束,它要求字段没有冗余。 没有冗余的数据库设计能够作到。
可是,没有冗余的数据库未必是最好的数据库,有时为了提升运行效率,就必须下降范式标准,适当保留冗余数据。具体作法是: 在概念数据模型设计时遵照第三范式,下降范式标准的工做放到物理数据模型设计时考虑。下降范式就是增长字段,容许冗余。
垂直拆分就是要把表按模块划分到不一样数据库表中(固然原则仍是不破坏第三范式),这种拆分在大型网站的演变过程当中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一块儿,当网站不断丰富和壮大的时候,也会变成多个子系统来支撑,这时就有按模块和功能把表划分出来的需求。其实,相对于垂直切分更进一步的是服务化改造,说得简单就是要把原来强耦合的系统拆分红多个弱耦合的服务,经过服务间的调用来知足业务需求看,所以表拆出来后要经过服务的形式暴露出去,而不是直接调用不一样模块的表,淘宝在架构不断演变过程,最重要的一环就是服务化改造,把用户、交易、店铺、宝贝这些核心的概念抽取成独立的服务,也很是有利于进行局部的优化和治理,保障核心模块的稳定性
垂直拆分用于分布式场景。
上面谈到垂直切分只是把表按模块划分到不一样数据库,但没有解决单表大数据量的问题,而水平切分就是要把一个表按照某种规则把数据划分到不一样表或数据库里。例如像计费系统,经过按时间来划分表就比较合适,由于系统都是处理某一时间段的数据。而像SaaS应用,经过按用户维度来划分数据比较合适,由于用户与用户之间的隔离的,通常不存在处理多个用户数据的状况,简单的按user_id范围来水平切分
通俗理解:水平拆分行,行数据拆分到不一样表中, 垂直拆分列,表数据拆分到不一样表中
MySQL默认10秒内没有响应SQL结果,则为慢查询
能够去修改MySQL慢查询默认时间
--查询慢查询时间 show variables like 'long_query_time'; --修改慢查询时间 set long_query_time=1; ---可是重启mysql以后,long_query_time依然是my.ini中的值
经常使用命令 --mysql数据库启动了多少时间 show status like 'uptime'; show stauts like 'com_select' show stauts like 'com_insert' ...类推 update delete(显示数据库的查询,更新,添加,删除的次数) show [session|global] status like .... 若是你不写 [session|global] 默认是session 会话,指取出当前窗口的执行,若是你想看全部(从mysql 启动到如今,则应该 global) //显示到mysql数据库的链接数 show status like 'connections '; //显示慢查询次数 show status like 'slow_queries';
在默认状况下,咱们的mysql不会记录慢查询,须要在启动mysql时候,指定记录慢查询才能够
bin\mysqld.exe --safe-mode --slow-query-log [mysql5.5 能够在my.ini指定](安全模式启动,数据库将操做写入日志,以备恢复)
bin\mysqld.exe –log-slow-queries=d:/abc.log [低版本mysql5.0能够在my.ini指定]
先关闭mysql,再启动, 若是启用了慢查询日志,默认把这个文件放在
my.ini 文件中记录的位置
#Path to the database root
datadir=" C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
详细优化SQL过程:
首先经过日志来找到慢查询的语句,在经过执行计划确认慢查询的缘由,再更加状况优化语句,避免使用致使全表扫描关键字
另外再优化时,咱们能够更加需求添加索引,配置读写分离,数据量大的时候适当的分表
而后能够配置Mysql的链接状态,适当增长数据库服务器的配置