
MySQL
MySQL
优化
优化
——
——
zhys9
zhys9

1.1
1.1
建表 – 表的类型
建表 – 表的类型
•
MySQL
MySQL
中表的类型表现为不同的存储引
中表的类型表现为不同的存储引
擎(
擎(
Storage Engine
Storage Engine
),同一种存储引擎在
),同一种存储引擎在
不同的应用中表现出的性能差异也是不容忽
不同的应用中表现出的性能差异也是不容忽
略的重要因素。因此,在建表之初应当正确
略的重要因素。因此,在建表之初应当正确
选择表的类型。鉴于我们的应用范围熟悉
选择表的类型。鉴于我们的应用范围熟悉
M
M
yISAM
yISAM
和
和
InnoDB
InnoDB
两种类型的性能区别即可,
两种类型的性能区别即可,
MyISAM
MyISAM
类型在
类型在
select
select
操作多的应用中优势
操作多的应用中优势
明显;
明显;
InnoDB
InnoDB
在
在
insert
insert
、
、
update
update
操作多的
操作多的
应用中优势明显。
应用中优势明显。

1.2
1.2
建表 – 数据类型
建表 – 数据类型
•
选择数据类型来帮助提高查询运行速度
选择数据类型来帮助提高查询运行速度
•
把数据列定义成不能为空(
把数据列定义成不能为空(
NOT NULL
NOT NULL
)。
)。
这会使处理速度更快,需要的存储更少。它有
这会使处理速度更快,需要的存储更少。它有
时候还简化了查询,因为在某些情况下不需要
时候还简化了查询,因为在某些情况下不需要
检查值的
检查值的
NULL
NULL
属性。
属性。
•
考虑使用
考虑使用
ENUM
ENUM
数据列。如果某个数据列
数据列。如果某个数据列
的基数很低(包含的不同的值数量有限),那
的基数很低(包含的不同的值数量有限),那
么可以考虑把它转换为
么可以考虑把它转换为
ENUM
ENUM
列。
列。
ENUM
ENUM
值可
值可
以被更快地处理,因为它们在内部表现为数值。
以被更快地处理,因为它们在内部表现为数值。

1.2
1.2
建表 – 数据类型
建表 – 数据类型
•
以下是几种常用数据类型在
以下是几种常用数据类型在
MySQL
MySQL
中
中
的性能顺序(从高到低)
的性能顺序(从高到低)
INT > CHAR > VARCHAR > TEXT
INT > CHAR > VARCHAR > TEXT
ENUM
ENUM
介于
介于
INT
INT
与
与
CHAR
CHAR
性能行之间;
性能行之间;
在相同数据类型的情况下,长度短的性能
在相同数据类型的情况下,长度短的性能
更高,因此在建表时要充分考虑每个字段最
更高,因此在建表时要充分考虑每个字段最
合适的类型及长度。
合适的类型及长度。

1.3
1.3
建表 – 索引
建表 – 索引
•
索引是提高查询速度的最重要的工具。
索引是提高查询速度的最重要的工具。
当然还有其它的一些技术可供使用,但是一
当然还有其它的一些技术可供使用,但是一
般来说引起最大性能差异的都是索引的正确
般来说引起最大性能差异的都是索引的正确
使用与否。
使用与否。
如果要考虑给已经索引过的表添加索引,
如果要考虑给已经索引过的表添加索引,
那么就要考虑将要增加的索引是否是已存在
那么就要考虑将要增加的索引是否是已存在
于多列索引的
于多列索引的
最左前缀
最左前缀
。如果是已存在的就
。如果是已存在的就
不用新增加索引了。
不用新增加索引了。