SQL
优化的一些方法
1.在查询过程中,尽量避免全表扫描,考虑在where
和order by
涉及的列上建立索引。
2.尽量避免在where
子句中对字段进行NULL
的判断,建议不使用NULL
,因为在查询的时候NULL
是不会通过索引来检索的,他会放弃使用索引而进行全表扫描。
3.尽量避免查询条件中使用like关键字,像%…%
和%...
这样的条件是没有办法使用索引的。使用的是全表扫描,还有就是由于匹配算法的关系,like
的字段长度越大,模糊查询的效率越低。并且优化空间很小。
4.不要在where
子句中使用!=
和<>
操作符。原因同上,放弃索引,使用全表扫描。可以使用or
来修改。
�6.or
有时候也会导致全表扫描,一个字段有索引,一个字段上没有索引,在使用or
的查询的时候也会导致全表扫描。
7.避免对字段进行表达式操作或者函数操作。
8.update
操作,如果只更改1、2个字段的话,不要修改所有字段。否则频繁调用会引起明显的性能消耗,同时带来大量日志。
9.连接的使用,在使用表join
的时候,如果有分页的话,先分页在join
。否者逻辑上的读写会很高,性能很差。当然要考虑分页前后的消息展示是否会因为join
进行缺失。可能会导致两个操作方式显示的结果不一致。很有可能不一致。
10.不带任何条件的count
函数,会引起全表扫描?也就是说count(*)
与count(id)
是有区别的么?不同MySQL
的版本这个函数的性能不一样。
11.�索引的类型(BTREE,RTREE,HASH,FULLTEXT)。索引也并不是越多越好,可能在查询的时候很方便,但是在插入和修改操作的时候,可能会出现索引重建的情况。所以索引的使用也要看具体的情况。索引太多了需要考虑哪些不常使用的索引是否有存在的必要,或者使用别的解决方法。
12.拆分大的delete
或者insert
语句,可以使用批处理,同时这两个操作会出现锁表的情况。
13.尽量避免使用大的事务,控制事务的粒度。能提高系统的并发能力。
参考文章:[数据库SQL优化大总结之 百万级数据库优化方案]
加上了部分自己的总结
部分比较好用的MySQL的相关操作,简单记录
设置终端
MySQL
的编码。
set names"utf8";
输出查询结果到文件
into outfile '/tmp/a.csv'