标量子查询优化外连接,标量子优化连接
同事发来2个语句,说语句1跑得慢,语句2很快就出结果。一执行,果然很慢。仔细发现,2个语句不等价。
语句1:select l.*,o.object_name from v$locked_object l left join all_objects o on l.object_id=o.object_id;
语句2:
select l.*,o.object_name from v$locked_object l,all_objects o where l.object_id=o.object_id;
左外连接,少了一个加号,改一改语句2,使它等价为语句1.
语句3:
select l.*,o.object_name from v$locked_object l,all_objects o where l.object_id=o.object_id(+);
改成等价后也非常慢。
虽然语句2不等价,为什么语句2要比1和3快?看了一会执行计划,明白了。语句1中OBJ$走的是全表,语句2中OBJ$走的是索引。
性能瓶颈主要是all_objects非常慢,count一下花了超过15分钟,有100w以上的数据。
最终返回数据量才80条。
标量子查询的优化方法有哪些?
一种是建立索引优化,一种是外连接。
那么是不是标量子查询任何时候性能都要比外连接差呢,不一定。
下面改成标量子查询的语句
语句4:
select l.*,(select o.object_name from all_objects o where l.object_id=o.object_id) from v$locked_object l;
现在这种情况本身有索引了,可以改写成标量子查询,也是非常快。
避免了OBJ$的全表,all_objects有100w多记录
改写后等价于原来左外连接的意思,速度杠杠的,2s内出结果。
有种写法不知道你是否能够接受
select instructor.ID,name,course_id
from instructor, teaches
where instructor.ID=teaches.ID
union
select instructor.ID,name,null as course_id
from instructor
where instructor.ID not in (select teaches.ID from teaches)
朋友问的是“网站优化需要注意那些方面”吧?
首先强调的是,网站优化是个长期漫长的过程,必须不断坚持,每日规律性维护网站(原创文章的每日规律性上传及内链建设,同时每日外链建设也必须规律);
其次,网站结构是否更有利于搜索引擎的抓取及网友良好用户体验的建立,譬如不用或少用FLASH动画,不用JS代码链接等,网站有较强的逻辑性,方便网友阅读及搜索引擎蜘蛛爬行。
在网站内容上传中,坚决杜绝重复内容的上传,杜绝完全复制内容,坚决杜绝那种推销意味浓厚,根本不顾及读者感受的文章信息上传。
高质量的外链自然是与网站内容相关性强、权重高、流量大的网站文章内链接(尤其是锚文本链接,即带网站关键词并指向此关键词所在页面的链接。
同时必须提醒朋友注意的是,在强调网站外链的同时,网站内链也必须高度重视。因为与外链相比,内链更稳定。
综合发外链的方法主要有以下几种:
一、与内容相关联性较强、各方面网站SEO情况相当的网站做友情链接(小心遇上被搜索引擎K或降权的网站);
二、在一些友情链接交换平台上登记链接交换留下自己的网址;
三、在一些允许带超文本网址链接的论坛发贴(或跟贴)带上自己的网址(最好是人工发贴);
四、在百度知道、腾讯搜搜、天涯问答之类知名的互交式知识平台上带自己的网址发问或回答问题(一定要慎重,这些地方管理挺严的,稍不留意就删除问答或者封杀ID,但只要留下,就是一条网站高权重的优质外链);
五、在种类繁多的国内B2B网站上注册商铺,带上自己的网址;
六、根据朋友情况,可以撰写或组织一些对本行业发展某方面有着独特见解的文章带网址在国内行业权威网站上发表,转载网站一定很多,你就可以较轻松地获得不少优质链接(但目前此种方法获得的外链大多为纯文本网址记录)。
七、如果朋友擅长于编程,那么可以自制一些方便、实用、易操作的小程序(或者程序小插件)在版权申明处注明自己的网址,放在国内知名下载网站上供人们免费下载,也能获得不少的优质外链。
八、网络收藏夹及网络书签。
九、向各大知名网站目录提交自己网站,一旦收录,朋友网站不仅获得优质外链,而且搜索引擎收录量也会大大提升。
十、各种分类信息网站(但这类网站往往带上的也是纯文本网址)。
必须提醒朋友的是,外链的发布要讲究规律性发布,要与网站内容规律性添加(内链建设)同步发展,短时期内大量增加优质外链会被搜索引擎判别为作弊,严重者降权甚至K站。