1 尽量去除 表连接操作,尽量减少操作到的列(少用select *),尽量减少sql需要扫描的列
2 精简数据类型和约束条件,以改进表结构
3 合理的构建索引 确保on或者using子句上的列上有索引 where 条件 order by 列有索引
4 去除重复索引,删除不用的索引
5 确保group by和order by中的表达式只涉及表中的一个列
6 Where 中对字段尽量不要函数式操作
7 避免使用 != <>, in, not in,is not null这会导致全表扫描
8 用exist代替in
9 表的设计合理化(符合3NF)
10 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]
11 分表技术(水平分割、垂直分割)
12 读写[写: update/delete/add]分离
13 存储过程 [模块化编程,可以提高速度]
14 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ]
15 mysql服务器硬件升级
16 定时的去清除不需要的数据,定时进行碎片整理(MyISAM)
17 order by where 经常使用,不频繁修改的字段 添加索引
18 全表扫描
Or
Is not null
Is null(除过 离散度比较大的 不会全表扫描)、最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库.
不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。
!= <>
like '%name1'尽量不使用 like查询 ,%开始的会引起全表扫描
in, not in (只有主键,才不全表扫描) 对于连续的数值,能用 between 就不要用 in ,between 不会引起全表扫描
1 尽量去除 表连接操作,尽量减少操作到的列(少用select *),尽量减少sql需要扫描的列 2 精简数据类型和约束条件,以改进表结构 3 合理的构建索引 确保on或者using子句上的列上有索引 where 条件 order by 列有索引 4 去除重复索引,删除不用的索引 5 确保group by和order by中的表达式只涉及表中的一个列 6 Where 中对字段尽量不要函数式操作 7 避免使用 != <>, in, not in,is not null这会导致全表扫描 8 用exist代替in 9 表的设计合理化(符合3NF) 10 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引] 11 分表技术(水平分割、垂直分割) 12 读写[写: update/delete/add]分离 13 存储过程 [模块化编程,可以提高速度] 14 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ] 15 mysql服务器硬件升级 16 定时的去清除不需要的数据,定时进行碎片整理(MyISAM) 17 order by where 经常使用,不频繁修改的字段 添加索引 18 全表扫描 Or Is not null Is null(除过 离散度比较大的 不会全表扫描)、最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库. 不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。 != <> like '%name1'尽量不使用 like查询 ,%开始的会引起全表扫描 in, not in (只有主键,才不全表扫描) 对于连续的数值,能用 between 就不要用 in ,between 不会引起全表扫描
索引为组合索引时,只有第一个索引字段才会起作用
SQL语句优化实际是个综合性的工作 硬件服务器、MySQL配置、表结构、索引、临时表、SQL语句等一起综合考虑