cghtom / someTips

log4j日志级别 shell操作手册 面试 总结
0 stars 0 forks source link

常用的SQL语句优化手段 #9

Open cghtom opened 7 years ago

cghtom commented 7 years ago

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语句等一起综合考虑