数据库SQL优化大总结之

作者: 数据库信息  发布:2019-07-07

这篇文章是我在网上找到的,感觉不错就粘过来了,感谢原作者的辛勤总结。

1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

原文链接:

 

1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num is null
select id from t where num is null

最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库.

最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库.

备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。

备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。

不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。

不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。

 

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num = 0
select id from t where num = 0

3.应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。

 

4.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描,如:

3.应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。

select id from t where num=10 or Name = 'admin'

4.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描,如:

可以这样查询:

select id from t where num=10 or Name = 'admin'
select id from t where num = 10
union all
select id from t where Name = 'admin'

可以这样查询:

澳门金莎娱乐网站 ,5.in 和 not in 也要慎用,否则会导致全表扫描,如:

select id from t where num = 10
union all
select id from t where Name = 'admin'
select id from t where num in(1,2,3)

5.in 和 not in 也要慎用,否则会导致全表扫描,如:

对于连续的数值,能用 between 就不要用 in 了:

select id from t where num in(1,2,3)
select id from t where num between 1 and 3

对于连续的数值,能用 between 就不要用 in 了:

很多时候用 exists 代替 in 是一个好的选择:

select id from t where num between 1 and 3
select num from a where num in(select num from b)

很多时候用 exists 代替 in 是一个好的选择:

用下面的语句替换:

select num from a where num in(select num from b)
select num from a where exists(select 1 from b where num=a.num)

用下面的语句替换:

6.下面的查询也将导致全表扫描:

select num from a where exists(select 1 from b where num=a.num)
select id from t where name like ‘
					

本文由金沙澳门官网发布于数据库信息,转载请注明出处:数据库SQL优化大总结之

关键词: 金沙澳门官网

上一篇:澳门金莎娱乐网站:的前世今生
下一篇:没有了