mysql性能优化-自我总结
Posted zhq--blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql性能优化-自我总结相关的知识,希望对你有一定的参考价值。
mysql性能优化分析思路:sql查询优化及索引;数据库表结构;服务器级优化(系统配置;硬件)。
(一、使用索引)
索引是优化查询的最常用也是最有效的的方法,一个数据表,尤其是容量很大的表,建立合适的索引,会使查询的速度提高很大。
1.索引对单个表查询的影响:不需要逐行搜索全表查找匹配的条款,而是可以利用索引
进行查找。
- 索引对多个表查询的影响。
如上1,2所述,MySQL 利用索引加速了 WHERE 子句中与条件相配的行的搜索,或者说
在执行连接时加快了与其他表中的行匹配的行的搜索。
根据sql查询语句确定创建哪种类型的索引,如何优化查询
选择索引列:
a.性能优化过程中,选择在哪个列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在where子句中出现的列,在join子句中出现的列。
b.考虑列中值的分布,索引的列的基数越大,索引的效果越好。
c.使用短索引,如果对字符串列进行索引,应该指定一个前缀长度,可节省大量索引空间,提升查询速度。
d.不要过度索引,只保持所需的索引。首先,索引文件要占磁盘空间。其次,索引文件加快了检索,但增加了插入和删除,以及更新索引列中的值的时间(即,降低了写操作的性能),因为写操作不仅涉及数据行,而且还常常涉及索引。一个表拥有的索引越多,则写操作的平均性能下降就越大。
(二、数据类型的问题)
1 、使你的数据尽可能小
最基本的优化之一是使你的数据(和索引)在磁盘上(并且在内存中)占据的空间尽可能小。
你能用下面的技术使表的性能更好并且使存储空间最小:
l
a.尽可能地使用最有效(最小)的类型。MySQL有很多节省磁盘空间和内存的专业化
类型。
l
b.如果可能使表更小,使用较小的整数类型。例如,MEDIUMINT 经常比 INT 好一
些。
l
c.如果可能,声明列为 NOT NULL。它使任何事情更快而且你为每列节省一位。注
意如果在你的应用程序中你确实需要 NULL,你应该毫无疑问使用它,只是避免
缺省地在所有列上有它。
2 、使用定长列,不使用可变长列
这条准则对被经常修改,从而容易产生碎片的表来说特别重要。例如,应该选择 CHAR
列而不选择 VARCHAR 列。所要权衡的是使用定长列时,表所占用的空间更多,但如果
能够承担这种空间的耗费,使用定长行将比使用可变长的行处理快得多。
3 、将列定义为 NOT NULL
这样处理更快,所需空间更少。而且有时还能简化查询,因为不需要检查是否存在特
例 NULL。
4 、考虑使用 ENUM 列
如果有一个只含有限数目的特定值的列,那么应该考虑将其转换为 ENUM 列。ENUM
列的值可以更快地处理,因为它们在内部是以数值表示的。
(blob类型与text类型
BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。
BLOB 列被视为二进制字符串(字节字符串)。TEXT列被视为非二进制字符串(字符字符串)。BLOB列没有字符集,并且排序和比较基于列值字节的数值值。TEXT列有一个字符集,并且根据字符集的 校对规则对值进行排序和比较。
)
5、使用 ANALYSE 过程检查表列SELECT * FROM student PROCEDURE ANALYSE();相应输出中有一列是关于表中每列的最佳列类型的建议。
(二、sql查询的优化)
1.使用 EXPLAIN 语句检查 SQL 语句 EXPLAIN SELECT student.name From student,pet WHERE student.name=pet.owner;
借助于 EXPLAIN,你可以知道你什么时候必须为表加入索引以得到一个使用索引找到记录的更快的SELECT。
(三、)
本节介绍了有关数据表的优化技巧,主要内容有,选择表的类型,打开尽量少的表,
锁定表与查询速度的关系以及如何优化表以达到提高查询速度的目的。
(四、服务器级的优化)
有的服务器参数直接适用于查询处理,可将它们打开。而有的硬件配置问题直接影响查询处理速度,应该对它们进行调整。
硬件问题:在机器中安装更多的内存。
以上是关于mysql性能优化-自我总结的主要内容,如果未能解决你的问题,请参考以下文章