您的位置:首页 > 数据库 > MySQL

mysql优化

2016-07-07 14:27 435 查看
对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要。一般来说要保证数据库的性能要保证以下四方面的工作:数据库设计,sql语句优化,数据库参数配置,恰当的硬件资源和操作系统,这个顺序也表现了这四个工作对性能影响的大小。

为什么要进行mysql优化:

假设我们设置一个数据量超过10万条记录的表,来进行我们经常做的查询操作比如:select * from 表名,服务器很慢甚至卡死,需要我们重启数据库服务器,这说明我们的表或者查询SQL是有问题的,所以我们要进行mysql优化

数据库优化的目的?

通过各种对数据的优化方法,获取最高的查询和加载性能,达到查询性能的提高和加载性能的提高;

方式和途径:

建表,索引,配置,sql语句都需要优化;

mysql运行原理



1. 查询缓存,判断sql语句是否完全匹配,再判断是否有权限,两个判断为假则到解析器解析语句,为真则提取数据结果返回给用户。

2. 解析器解析。解析器先词法分析,语法分析,检查错误比如引号有没闭合等,然后生成解析树。

3. 预处理。预处理解决解析器无法决解的语义,如检查表和列是否存在,别名是否有错,生成新的解析树。

4. 优化器做大量的优化操作。

5. 生成执行计划。

6. 查询执行引擎,负责调度引擎获取相应数据

7. 返回结果。

为什么要分表?

数据库中的数据量不一定是可控的,在未进行分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。

什么是分表?

原本存储于一个表的数据分块存储到多个表上;

对表进行水平划分

如果一个表的记录数太多了,比如上千万条,而且 需要经常检索,那么我们就有必要化整为零了。如果我拆成100个表,那么每个表只有10万条记录。当然这需要数据在逻辑上可以划分。一个好的划分依据,有 利于程序的简单实现,也可以充分利用水平分表的优势。比如系统界面上只提供按月查询的功能,那么把表按月拆分成12个,每个查询只查询一个表就够了。如果 非要按照地域来分,即使把表拆的再小,查询还是要联合所有表来查,还不如不拆了。所以一个好的拆分依据是最重要的。

对表进行垂直划分

有些表记录数并不多,可能也就2、3万条,但是字段却很长,表占用空间很大,检索表时需要执行大量I/O,严重降低了性能。这个时候需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: