集搜客网页抓取软件络爬虫抓去数据无忧

下次自动登录
现在的位置:
& 综合 & 正文
sql server2000中查询对数据库中的哪些表进行修改过
版本号,该版本号在每次表的架构更改时都增加。
drop table tb
&&&&推荐文章:
【上篇】【下篇】怎么查询数据库中所有不为空的表,并返回相应表名称、行数 - Sql Server当前位置:& &&&怎么查询数据库中所有不为空的表,并返回相应表名称怎么查询数据库中所有不为空的表,并返回相应表名称、行数&&网友分享于:&&浏览:291次如何查询数据库中所有不为空的表,并返回相应表名称、行数。如何查询数据库中所有不为空的表,并返回相应表名称、行数。
------解决方案----------------------这个row数量不会太实时。想精确,就得循环SELECT&COUNT(*)&FROM&TABLENAME的方式。没效率
MaxRows&=&MAX(B.rows)
FROM&sys.tables&A
INNER&JOIN&sys.partitions&B
ON&A.object_id&=&B.object_id
GROUP&BY&A.name
ORDER&BY&MAX(B.rows)&DESC------解决方案--------------------select&distinct&object_name(id)&from&sys.sysindexes&where&rowcount&1------解决方案--------------------应该是
select&distinct&object_name(id)&from&sys.sysindexes&where&rows&0&
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有您的位置: >
SQL中哪些情况会引起全表扫描
学习标签:
本文导读:大家都知道,用SQL语句对数据库进行操作时,如果引起全表扫描会对数据库的性能形成影响,下面向大家简单介绍SQL中哪些情况会引起全表扫描。
1、模糊查询效率很低:
原因:like本身效率就比较低,应该尽量避免查询条件使用like;对于like &%...%&(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低;另外,由于匹配算法的关系,模糊查询的字段长度越大,模糊查询效率越低。
解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询,对于右模糊查询,即like &&%&,是会使用索引的;左模糊like
&%...&无法直接使用索引,但可以利用reverse + function index 的形式,变化成 like &&%&;全模糊是无法优化的,一定要的话考虑用搜索引擎。出于降低数据库服务器的负载考虑,尽可能地减少数据库模糊查询。
2、查询条件中含有is null的select语句执行慢
原因:Oracle 9i中,查询字段is null时单索引失效,引起全表扫描。
解决方法:SQL语法中使用NULL会有很多麻烦,最好索引列都是NOT NULL的;对于is null,可以建立组合索引,nvl(字段,0),对表和索引analyse后,is null查询时可以重新启用索引查找,但是效率还不是值得肯定;is not null 时永远不会使用索引。一般数据量大的表不要用is null查询。
3、查询条件中使用了不等于操作符(&&、!=)的select语句执行慢
原因:SQL中,不等于操作符会限制索引,引起全表扫描,即使比较的字段上有索引
解决方法:通过把不等于操作符改成or,可以使用索引,避免全表扫描。例如,把column&&&aaa&,改成column&&aaa& or column&&aaa&,就可以使用索引了。
4、or语句使用不当会引起全表扫描
原因:where子句中比较的两个条件,一个有索引,一个没索引,使用or则会引起全表扫描。例如:where A==1 or B==2,A上有索引,B上没索引,则比较B=:2时会重新开始全表扫描。
5、组合索引,排序时应按照组合索引中各列的顺序进行排序,即使索引中只有一个列是要排序的,否则排序性能会比较差。
例如:create index skip1 on emp5(job,empno,date);&
select job,empno from emp5 where job=&manager&and empno=&10& order by job,empno,
实际上只是查询出符合job=&manager&and empno=&10&条件的记录并按date降序排列,但是写成order by date desc性能较差。
6、Update 语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。
7、对于多张大数据量(这里几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。
8、select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。
上面列出了通常会引起全表扫描的常用几种情况,更多的情况需要我们在工作、学习中实践、摸索,才能够深入分析SQL执行计划,找到适合自己系统的SQL数据库解决方案。
您可能感兴趣
一月好评排行榜2011年十二月
现在位置: &&
&>&&>&正文
提高SQL查询效率 的10大方法
,,提高 的10大方法
一、查询条件精确,针对有参数传入情况
二、SQL逻辑执行顺序
FROM–&JOIN–&WHERE–&GROUP–&HAVING–&DISTINCT–&ORDER–&TOP
查询需要的字段
当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误
四、少做重复工作
控制同一语句的多次执行,特别是一些基础数据的多次执行是很多程序员很少注意的
减少多次的数据转换
杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接表带来额外的开销
五、关于零时表#与表变量@
如果语句很复杂,连接太多,可以考虑用临时表和表变量分步完成
如果需要多次用到一个大表的同一部分数据,考虑用临时表和表变量暂存这部分数据
如果需要综合多个表的数据,形成一个结果,可以考虑用临时表和表变量分步汇总这多个表的数据
关于临时表和表变量的选择,在数据量较多的情况下,临时表的速度反而更快
SELECT INTO会比CREATE TABLE + INSERT INTO的方法快,但是SELECT INTO会锁定TEMPDB的系统表SYSOBJECTS、SYSINDEXES、SYSCOLUMNS,在多用户并发环境下,容易阻塞其他进程
六、子查询
子查询可以用IN、NOT IN、EXISTS、NOT EXISTS引入
NOT IN、NOT EXISTS的相关子查询可以改用LEFT JOIN代替写法
如果保证子查询没有重复 ,IN、EXISTS的相关子查询可以用INNER JOIN 代替
IN的相关子查询用EXISTS代替
避免对索引字段进行计算操作
SELECT ID FROM T WHERE NUM/2=100
SELECT ID FROM T WHERE NUM=100*2
避免在索引字段上使用NOT,&&,!=
避免在索引列上使用IS NULL和IS NOT NULL
避免在索引列上出现数据类型转换
避免在索引字段上使用函数
避免建立索引的列中使用空值
不要对索引字段进行多字段连接
WHERE FAME+’. ‘+LNAME=’HAIWEI.YANG’
WHERE FNAME=’HAIWEI’ AND LNAME=’YANG’
八、多表连接
多表连接的时候,连接条件必须写全,宁可重复,不要缺漏
连接条件尽量使用聚集索引
在可以使用UNION ALL的语句里,使用UNION ALL
避免在WHERE子句中使用IN,NOT IN,OR
避免使用耗费资源的操作,带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎执行,耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序
LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。
【上篇】【下篇】
与本文相关的文章
该日志由 Bruce 于日发表在分类下苹果/安卓/wp
学科带头人
学科带头人
积分 4264, 距离下一级还需 1561 积分
权限: 自定义头衔, 签名中使用图片, 隐身, 设置帖子权限, 设置回复可见
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发, 提升卡, 沉默卡, 千斤顶下一级可获得
道具: 变色卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
TA的文库&&
开心签到天数: 5 天连续签到: 1 天[LV.2]偶尔看看I
本帖最后由 Imasasor 于
15:52 编辑
sql多个表之间查询
通常的语句就是
select table1.var,table2.var from table1,table2
where table1.anyvar=table2.
其运行机制是什么?
假设现在有如下需求:
/*目的:生成一个数据集,包含两个变量,一个为id,一个为ticker,id为x中id唯一值,ticker为y中与x对应的id所对应的唯一的ticker*/
/*生成数据集z结果如下:*/
用一个sql步解决的话就是:
select distinct x.id,y.ticker from x,y
where x.id=y.id1;
那么上述代码的原理到底是什么?如果没有distinct,我还能说出个一二来,现在distinct在多表之间利用
是怎么来的,想了半天,不知道以下的想法是否正确,望熟悉sql的同学指导一下:
/*以上sql的机制是不是如下:*/
/*step 1:*/
create table z1 as
select x.*,y.* from x,y;
/*from语句起作用,full join*/
/*step 2:*/
create table z2 as
select * from z1
where id=id1;
/*where语句起作用*/
/*step 3:*/
select distinct id,ticker from z2;
/*select语句的作用*/
/*联合上述step 1,2,3就是:*/
select distinct x.id,y.ticker from x,y
where x.id=y.id1;
所有sql语句是不是都可以如下理解:
先对两个表full join, 然后根据where,或者on,选择full join之后的部分观测,然后再用select选择其中的部分变量?
望高手解惑
附利用data步代码:
proc sort data=x out=x1
proc sort data=y out=y1(rename=(id1=id))
merge x1(in=_1) y1;
载入中......
本帖被以下文库推荐
& |主题: 38, 订阅: 12
欢迎加入亚太地区第一R&Python数据挖掘群: ;
本帖最后由 yuerqieqie 于
04:47 编辑
记得说 SAS SQL由SAS Optimier来选择最省时间的方法来执行代码,所以代码执行方式是case by case的。
用_method _tree 可以看到SQL是如何执行的
proc sql _method _
select distinct x.id,y.ticker from x,y
where x.id=y.id1;
04:37:36 上传
从output可以见到SQL先从data x里选择了id,data y 里选择了id1和ticker,再用hash join的方法把两个表join到一块儿(条件是x.id = y.id1),然后保留id和ticker,最后是unique那一步
总评分:&经验 + 100&
论坛币 + 100&
学术水平 + 3&
热心指数 + 3&
信用等级 + 2&
yuerqieqie 发表于
记得说 SAS SQL由SAS Optimier来选择最省时间的方法来执行代码,所以代码执行方式是case by case的。
用_m ...学习了,_method和_tree的用法挺神奇
为什么是前方加一个下划线,按SAS的特点应该是后面也加一个的啊
我倒是从没想过SQL运行的原理,我发现SAS的Data步较SQL快些
Oracle和SQL Server的SQL表连接也要比SAS的快些
过去最早我是用SAS调Oracle,然后连完了再导回SAS
后来换公司了转为用SQL Server,发现这么用不行,还是用SAS SQL统一做了
playmore邀请您访问ChinaTeX论坛!!!
可以参考一下这个关于SQL各子句执行顺序的图:
和谐拯救危机
初级学术勋章
初级学术勋章
初级热心勋章
初级热心勋章
初级信用勋章
初级信用勋章
中级热心勋章
中级热心勋章
中级学术勋章
中级学术勋章
中级信用勋章
中级信用勋章
高级热心勋章
高级热心勋章
高级学术勋章
高级学术勋章
无限扩大经管职场人脉圈!每天抽选10位免费名额,现在就扫& 论坛VIP& 贵宾会员& 可免费加入
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
京ICP证090565号
论坛法律顾问:王进律师

我要回帖

更多关于 集搜客网络爬虫 的文章

 

随机推荐