不要使用SELECT *
。为啥select * 会影响性能?
选择所有元素造成查询数据过多,而每次读取数据的过程都是磁盘的IO操作,对磁盘的读写操作负荷增大,对数据库的性能会有影响。使用了select * 查询时不会走索引,所以性能比较弱。
不要使用子查询
。什么是子查询?为什么不使用子查询?
子查询就是嵌套查询。
子查询会创建一个临时表,会影响性能。查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。
不使用关联查询
。什么是关联查询?为什么不使用关联查询?
join方式连接多个表,本质就是各个表之间数据的循环匹配。MySQL5.5版本之前,MySQL只支持一种表间关联方式,就是嵌套循环(Nested Loop Join)。如果关联表的数据量很大,则 join 关联的执行时间会非常长。在 MySQL5.5以后的版本中,MySQL 通过引入BNLJ算法来优化嵌套执行。
因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,它是走嵌套查询的。小表驱动大表,且通过索引字段进行关联。如果表记录比较少的话,还是OK的。大的话业务逻辑中可以控制处理。
硬是要用join怎么办?
大小表优化,减少驱动表的数据量
不要使用in和not in
。使用exists和not exiexis。为什么不要使用in和not in?
因为这两个都是全表搜索,用不到索引和主键,所以导致搜索缓慢。