欢迎光临
感谢一路有你

数据库优化

如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
 

explain

用于事件前

explain各列意义

  • table
  • type(最好到最差const / eq_reg / ref / range / index / all)
  • possible_keys
  • key
  • key_len
  • ref
  • rows

sql语句优化

1.  避免在where子句中进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描

如: 
select id from t where num is null 

解决方法:设置默认值
2.  避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
3.  避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描
4.  in 和 not in 也要慎用,因为IN会使系统无法使用索引,而只能直接搜索表中的数据
5.  避免在索引过的字符数据中,使用非打头字母搜索。这也使得引擎无法利用索引。
6.  必要时强制查询优化器使用某个索引,如在 where 子句中使用参数,也会导致全表扫描
7.  尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描
8.  应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。
9.  不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
10.  很多时候用 exists是一个好的选择,效率会提高
11.  避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来
可以进行的优化操作。
12.  充分利用连接条件,在某种情况下,两个表之间可能不只一个的连接条件,这时在 WHERE 子句中将连接条件完整的写上,有可能大大提高查询速度。
13.  使用视图加速查询 
把表的一个子集进行排序并创建视图,有时能加速查询。它有助于避免多重排序 操作,而且在其他方面还能简化优化器的工作。
14.  能用DISTINCT的就不用GROUP BY 
15.  永远为每张表设置一个主键
16.  使用ENUM而不是VARCHAR
17.  尽可能的使用NOT NULL default
赞(0) 打赏
未经允许不得转载:王明昌博客 » 数据库优化
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏