A. 复杂慢sql语句如何优化
很简单啊,优先索引,第二结构,第三算法。
索引最简单,如果是SQL server客户端或者toad可以提示有哪些需要进行优化的地方。
结构就是针对要查询的值,尽量集中到一个表,减少串表,函数查询,左链的表字段查询。
算法就是OR还是IN?串表时IN还是EXISTS ?oracle in 的限制。条件执行顺序等。
然后还有其他注意的,例如只查固定字段就不要 select * 只要注意以上步骤,千万级数据串10个秒也能1秒内显示出来。
有条件的话,当然是用归档数据进行查询,这样就不会占用业务数据IO了,最后一步就是“云计算”(解析有一百种,没有统一概念,我的意识其实就是归档过程中根据分组维度计算好,并根据日期放进相关的表,减少表粒度,只进行简单的select查询)
B. 什么是hibernate懒加载什么时候用懒加载为什么要用懒加载
所谓懒加载(lazy)就是延时加载,延迟加载。
什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载。
至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,
因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,
我们让数据在需要的时候才进行加载,这时我们就用到了懒加载。
比如部门ENTITY和员工ENTITY,部门与员工1对多,如果lazy设置为false,那么只要加载了一个部门的po,就会根据一对多配置的关系把所有员工的po也加载出来。但是实际上有时候只是需要用到部门的信息,不需要用到 员工的信息,这时员工po的加载就等于浪费资源。如果lazy设置为true,那么只有当你访问部门po的员工信息时候才回去加载员工的po的信息。
hibernate3.0中lazy有三个值,true,false,proxy,默认的是lazy="proxy".
具体设置成什么要看你的需求,并不是说哪个设置就是最好的。
假如在student对象中包含一个head对象
如果你确定在用student对象的时候就要用到head对象里的属性,那你就设置立即加载,因为设置立即加载那么在查询student的同时就会查询student的head,hibernate就会在查询的时候关联两张表从而生成的sql就可能只有一条。而如果你设置的是延迟加载,那么肯定会要生成1+N条sql语句:其中“1”是查询student的语句,“N”是根据N个student的id去查询head的N条语句。而且,延迟加载是要用到的 时候才去执行查询,这样系统判断那里需要加载,那里不需要加载也需要时间,性能上肯定就不如立即加载了!
如果,你是有的地方需要用到student的时候才用到head属性,那么你就设置成延迟加载,因为查询2张表的数据肯定要比查询1张表的数据消耗大。
到低要怎样设置就要看你的实际需求了
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。
C. hibernate属性懒加载怎么设置
这个好像做不到
懒加载目的是提高效率
加载UserRole的一个属性和UserRole的所有属性,这样的效率差距非常小
(如果UserRole有Set等关联的,肯定已经采用了懒加载)
如果你的UserRole只有一个属性经常变动,而其它的不懂的话
建议给不经常变动的属性加入
dynamic-insert="true" dynamic-update="true"
意思就是动态插入更新
这样,当你把UserRole加载上来后(全部属性),你更新了一个属性(没有动态插入更新的)
那么你update之后
hibernate发出的sql语句,只有一个属性被赋值,而其它的(dynamic属性)是不会发出更新语句的
D. 怎样让SQL开机不自动启动
1、点击桌面左下角开始菜单,然后在搜索框内输入msconfig,按enter进入;
2、在弹出来的系统配置窗口中,切换到“启动”选项卡;
3、然后将带有sql server字样前的小勾去掉,,并点击确定就可以取消sql的开机自启动了。
E. 员工和部门两张表,是一对多的关系,并且是懒加载,如何通过员工查出部门信息,请高手指教!写一条sql。
select 部门信息 from 部门表 where 部门id = (select 部门id from 员工表 where 员工id = 员工id)
F. 如何设置sql 2000开机时不自动启动
开始——控制面板——管理工具——服务——按M找到MSSQLSERVER——右键属性——启动类型改为禁用
G. hibernate如何关闭懒加载
把这个对象对应的hbm.xml的中的相应属性设置成lazy="true" true是默认设置。
H. hibernate annotation懒加载怎么写
对应的属性写lazy="false";用load方法去获取对象,然后会只查询主表,当你用主表对象去获取从表对象时,会先从session里面去找从表对象,如果这个时候session关了,就会抛出sessionclosedexception,如果从session里面找到了,就不会执行sql了,如果session里没找到,会执行sql去查询数据库
I. sql语句问题,请问如何提高运行效率和速度
其实你的效率低的原因不是用SQL语句还是存储过程的问题。看你的描述以及代码,如果是多次循环上述代码的话,确实效率会比较低,原因是有一次循环就会和数据库产生一次查询和更新通讯,希望增加效率应该从尽量减少和数据库通讯方面来考虑解决,因为是这里出现了效率瓶颈。
下面是具体的代码分析:
首先更新和插入操作是无法减少的,必须一条纪录一条纪录更新,一条纪录一条纪录的插入,但是查询完全可减低为一次查询。
下面是伪代码:
strsql="select * from "&tabl&" where id+idd in ('所有要循环的id+idd,他们之间用逗号分开')"
rs.open strsql,conn,3,3
do while not rs.eof
rs("degree")=rs("degree")+1
tempstr=tempstr&id&idd&"|" '这里是将数据库中存在的id,idd记录保存下来,存入一个临时变量中,用|符号分割开。
rs.update
rs.movenext
loop
'上面的代码是更新了数据库中存在的纪录,并记录下了存在的记录ID+IDD
下面将所有存在的已update的id+idd的值从所有的id+idd的值中剔除掉,取到所有需要insert的id+idd纪录,然后一起insert进数据库即可。代码我不再写了,这样的字符串对比操作并不难,因为这样都是内存操作,速度会很快。仅提供一个思路。希望对你有用。
J. 怎么让系统启动时SQL不自动启动运行。
右键点击“我的电脑”打开属性“管理”在弹出的窗体里打开“服务和应用程序”——“服务”
在到右边找到“SQL
Server
(MSSQLSERVER)”
双击,在常规里有个“启动类型”把他改为手动
在把他的“服务状态”改为停止,就OK了