在平时写SQL时,养成好的习惯,多加留意,很大程度上就会避免一些SQL性能问题。汇总如下:
- 永远为每张表设置一个ID主键。
- 避免使用SELECT *。
- 为搜索字段建立索引。
- 在Join表的时候使用对应类型的列,并将其索引。
- 尽可能的使用NOT NULL。
- 越小的列会越快。
- 当只要一行数据时使用LIMIT 1。
- 操作符的优化,尽量不采用不利于索引的操作符,目的就是为了避免全表扫描。
1)in 和not in慎用,尽量用between代替in,用 not exists 代替 not in
2)is null和is not null慎用
3)!=或<>操作符能不用就不用,否则将使引擎放弃使用索引而进行全表扫描。
五、使用查询缓存
当有很多相同的查询被执行了多次的时候,这些查询结果会被放入一个缓存中,这样后续的相同查询就不用操作而直接访问缓存结果了。
MySQL查询缓存保存查询返回的完整结果。当查询命中该缓存,MySQL会like返回结果,跳过了解析、优化和执行截断。
这是提高查询性能最有效的方法之一,而且这是被MySQL引擎处理的,通常MySQL默认是不开启查询缓存的,需要手动开启。
查询缓存对应用程序是完全透明的。应用程序无需关心MySQL是通过查询返回的还是实际执行返回的结果。事实上,这两种方式执行的结果是完全相同的。换句话说,查询缓存无需使用任何语法。
随着现在的通用服务器越来越强大,查询缓存被发现是一个影响服务器扩展性的因素。它可能成为整个服务器的资源竞争单点,在多核服务器上还可能导致服务器僵死。所以大部分时候应该默认关闭查询缓存,如果查询缓存作用很大的话,可以配置个几十兆的小缓存空间。(在选择时,需要进行权衡)
关于查询缓存有如下参数可供配置:
- query_cache_type
是否打开查询缓存。可以设置OFF、ON、DEMAND,DEMAND表示只有在查询语句中明确写入sql_cache的语句才放入查询缓存。
- query_cache_size
查询缓存使用的总内存空间,单位是字节。这个值必须是1024的整倍数,否则实际分配的数据会和指定的大小有区别。
- query_cache_min_res_unit
在查询缓存中分配内存块时的最小单位。
- query_cache_limit
缓存的最大查询结果。如果查询结果大于这个值,则不会被缓存。因为查询缓存在数据生成的时候就开始尝试缓存数据,所以只有当结果全部返回后,MySQL才知道查询结果是否超出限制。
关于查询缓存,后续章节将会单独详细讲解。
以上就是MySQL优化SQL语句的技巧的详细内容,更多关于MySQL优化sql语句的资料请关注其它相关文章!