Sql优化

1、在表中建立索引,优先考虑WHERE、GROUP BY使用到的字段;

索引的优点:

a)、可以大大加快数据的检索速度。

b)、可以加速表和表之间的连接。

c)、在使用分组和排序子句进行数据检索时,显著减少查询中分组和排序时间。

d)、在查询过程中,提高系统的性能。

索引的缺点:

a)、索引需要占物理空间。

b)、创建索引和维护索引需要耗费时间。

c)、降低维护速度

一个表的索引数最好不要超过6个

不常使用到的列上建的索引是否有必要

2、尽量避免使用SELECT *,返回无用的字段会降低查询效率

如:SELECT * FROM Student

优化方式:使用具体的字段代替,只返回有用的字段*

如:SELECT name FROM Student

3、尽量避免使用IN和NOT IN,会导致数据库引擎放弃索引进行全表扫描

如:SELECT * FROM t1 WHERE name IN (SELECT name FROM t2)

优化方式:使用EXISTS, NOT EXISTS或者关联查询语句代替

如:SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.name = t2.name)

4、尽量避免使用OR,会导致数据库引擎放弃索引进行全表扫描

如:SELECT * FROM t WHERE number = 1 OR number = 5

优化方式:可以用UNION代替OR(OR扫描的是全表,UNION扫描的是索引)

如:SELECT * FROM t WHERE number = 1

​ UNION

​ SELECT * FROM t WHERE number =5

5、尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描

如:SELECT * FROM t WHERE name LIKE ‘%pang%’

优化方式:尽量在字段后面使用模糊查询。

如SELECT * FROM t WHERE name LIKE ‘pang%’

其中关于条件,SQL提供了四种匹配模式:

1、% :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

2、_ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:

3、[ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

4、[^] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

5,查询内容包含通配符时

由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。

6、尽量不要在WHERE条件里进行null值判断,会导致数据库引擎放弃索引进行全扫描

如:SELECT * FROM t WHERE score IS NULL

优化方式:给字段添加默认值0,对默认值0进行判断

如:SELECT * FROM t WHERE score = 0

7、尽量不要在WHERE条件中等号的左侧进行表达式、函数操作,会导致数据库引擎放弃索引进行全表操作

如:SELECT * FROM t WHERE score/10 = 10

​ SELECT * FROM t WHERE SUBSTR(Student, 1, 2) = ‘pa’

优化方式:可以将表达式、函数操作移动到等号右侧

如:SELECT * FROM t WHERE score = 10 * 9

​ SELECT * FROM t WHERE name LIKE ‘pa%’

8、当数据量大时,避免使用WHERE 1 = 1的条件。

SELECT * FROM t WHERE 1=1

优化方式:用代码拼装sql时进行判断,没WHERE加WHERE,有WHERE加AND

String sql = "SELECT name FROM Student WHERE 1=1 ";

sql += "and name = 'pang' ";
9、尽可能的使用 varchar/nvarchar 代替 char/nchar

a)、因为首先变长字段存储空间小,可以节省存储空间

b)、其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值