mysql语句性能优化(一)

1、尽量少用负向条件查询

  • 例如:!=、not in、not exists 都是不能使用索引的,
//表单Order 一个订单状态值 0为未付款 1为付款 2为待付款
select * from Order where status != 0

//当Order表中的数据量特别大的时候,这个查询的效率会急剧的下降。
//建议:
select * from Order where status in (1,2)

2、尽量不要在条件字段上面进行运算

select * from Order where Year(CreateTime) = 2018
//然后,每次执行时就会发现,查询的速度异常的慢,导致了大量的请求挂起甚至超时。
这是因为,我们即使在CreateTime上建立了索引,但是,如果使用了运算函数,
查询一样会进行全表的检索。
//建议:
select * from Order where CreateTime > '2018-1-1 00:00:00'

3、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。

4、尽可能的使用 varchar/nvarchar 代替 char/nchar , 因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

5、尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。

6、在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数。

7、尽量使用“>=”,不要使用“>”

8、提高GROUP BY语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉.

//低效:
SELECT JOB , AVG(SAL) FROM EMP GROUP BY JOB HAVING JOB =’PRESIDENT’ OR JOB =’MANAGER’
//高效:
SELECT JOB , AVG(SAL) FROM EMP WHERE JOB =’PRESIDENT’ OR JOB =’MANAGER’ GROUP BY JOB
posted @ 2023-01-11 14:52  海燕心海  阅读(42)  评论(0)    收藏  举报