SQL功能优化 A8站源码交易平台

摘要:关于联合索引来说,要恪守最左前缀规律 举列来说索引含有字段id,name,school,能够直接用id字段,也能够id,name这样的次序,可是name;school都无法运用这个索引。所以在创立联合索引的时分必定要注意索引字段次序,常用的查询字段放在最前面

 A8站源码交易平台    

 SQL功能优化

 

Oracle 优化器RBO, CBO 
RBO 根据规矩的优化器 oracle 10g开端,现已丢掉RBO 
CBO 根据本钱的优化器 oracle 8中开端引进的               
A8站源码交易平台

 

Oracle 解析器依照从右到左的次序处理FROM 字句中的表名,FROM 中写在最终的表(根底表, drving table)将先被处理,在FROM 子句中包括多个表的状况下,你有必要挑选记载条数最小的表作为根底表, 假如有3个以上的表衔接查,挑选穿插表(Insertection table)作为根底表,穿插表指的是被其他表锁引证的表

 

功能优化  
A8站源码交易平台
 

SELECT句子必须指明字段称号
SELECT *添加许多不必要的耗费(cpu、io、内存、网络带宽);添加了运用掩盖索引的或许性;当表结构发作改动时,前断也需求更新。所以要求直接在select后边接上字段名。

SQL句子中IN包括的值不该过多
MySQL关于IN做了相应的优化,行将IN中的常量悉数存储在一个数组里边,并且这个数组是排好序的。可是假如数值较多,发作的耗费也是比较大的。再例如:select id from table_name where num in(1,2,3) 关于接连的数值,能用 between 就不要用 in 了;再或许运用衔接来替换。

尽量用union all替代union
union和union all的差异主要是前者需求将成果集兼并后再进行唯一性过滤操作,这就会涉及到排序,添加许多的CPU运算,加大资源耗费及推迟。当然,union all的前提条件是两个成果集没有重复数据。

区别in和exists, not in和not exists
select * from 表A 
where id in (select id from 表B)
等价于

select * from 表A 
where exists(select * from 表B where 表B.id=表A.id)
区别in和exists主要是造成了驱动次序的改动(这是功能改变的要害),假如是exists,那么以外层表为驱动表,先被拜访,假如是IN,那么先履行子查询。所以IN适合于表面大而内表小的状况;EXISTS适合于表面小而内表大的状况。
关于not in和not exists,引荐运用not exists,不仅仅是功率问题,not in或许存在逻辑问题。怎么高效的写出一个替代not exists的sql句子?

比如   
A8站源码交易平台

select colname … from A表 
where a.id not in (select b.id from B表)
优化
select colname … from A表 Left join B表 on 
where a.id = b.id where b.id is null
      1.png                                      


不主张运用%前缀含糊查询
例如LIKE “%name”或许LIKE “%name%”,这种查询会导致索引失效而进行全表扫描。可是能够运用LIKE “name%”。

那怎么查询%name%?

如下图所示,尽管给secret字段添加了索引,但在explain成果果并没有运用

防止隐式类型转化
A8站源码交易平台

where 子句中呈现 column 字段的类型和传入的参数类型不一致的时分发作的类型转化,主张先确认where中的参数类型

 

关于联合索引来说,要恪守最左前缀规律
举列来说索引含有字段id,name,school,能够直接用id字段,也能够id,name这样的次序,可是name;school都无法运用这个索引。所以在创立联合索引的时分必定要注意索引字段次序,常用的查询字段放在最前面

 
A8站源码交易平台
总结以上优化主张
防止对索引字段进行核算操作 
防止在索引字段上运用 not <> != 
防止在索引字段上运用 is null , is not null 
防止在索引字段上呈现数据类型转化 
防止在索引字段上运用函数 
防止树立索引的列中运用空值
 
Union Union ALL 
union 会将各查询的子集的记载做比较,会比UNION ALL 功能差许多,
 
对与WHERE的句子规律 
尽量防止在WHERE子句中运用in, not in 或许 having ,能够运用exist ,not exist 替代 in ,not in
 
不要以字符格局声明数字, 不要以数字格局声明字符值,不然会使索引无效 
A8站源码交易平台


  • 全部评论(0)
最新发布的资讯信息
【A8站-免费源码分享|直播源码】直播系统源码开发:关于安卓开发工具和obs直播推流(2020-10-30 09:41)
【计算机/互联网|】【独家修复】用户定制版短视频点赞系统,支持抖音+快手+刷宝+微视等所有主流短视频评论系统源码(2020-10-26 16:34)
【技术宅-为技术而疯|网站架设教程】【独家首发】最新更新已对接短信2020全新抖音快手点赞任务系统霸屏天下小红书头条威客兼职完整搭建架设视频教程(2020-10-25 13:56)
【技术宅-为技术而疯|网站架设教程】最新可用个人发卡网系统源码完整搭建架设视频教程(2020-10-25 10:53)
【技术宅-为技术而疯|网站架设教程】独家更新全新V10抢单系统唯品会京东淘宝自动抢单区块系统源码全开源抢单收单接单返利+搭建架设完整视频教程(2020-10-25 10:52)
【计算机/互联网|】柔丫纸尿裤云仓系统源码部署(2020-10-15 18:13)
【计算机/互联网|】侏罗纪软件模式定制开发(2020-10-14 15:33)
【计算机/互联网|】S2b2C供应商系统 营销闭环(2020-10-10 17:46)
【计算机/互联网|程序设计开发】盛都汇系统奖励机制(2020-10-10 17:20)
【A8站-免费源码分享|网站源码】积分商城系统APP开发(2020-09-23 14:56)
联系我们
Q Q:3101359898 点击直接对话
电话:18580901894
邮箱:admin#a8zhan.com
时间:09:00 - 24:00
手机二维码 访问手机版
返回顶部