当前位置: 首页 > news >正文

有没有什么做水利资料的网站网站必须做百度推广才能被别人搜到吗

有没有什么做水利资料的网站,网站必须做百度推广才能被别人搜到吗,盐城优化办,做网站加模块优化SQL查询#xff1a;如何写出高性能SQL语句 1、首先要搞明白什么叫执行计划#xff1f;执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案#xff0c;这个方案是由查询优化器自动分析产生欀如一条SQL语句如果用来从一个10万条记录的表中查1条记录#…优化SQL查询如何写出高性能SQL语句 1、首先要搞明白什么叫执行计划执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案这个方案是由查询优化器自动分析产生欀如一条SQL语句如果用来从一个10万条记录的表中查1条记录那查询优化器会选择“索引查找”方式如果该表进行了归档当前只剩下5000条记录了那查询优化器就会改变方案采用 “全表扫描”方式。可见执行计划并不是固定的它是“个性化的”。产生一个正确的“执行计划”有两点很重要(1) SQL语句是否清晰地告诉查询优化器它想干什么(2) 查询优化器得到的数据库统计信息是否是最新的、正确的2、统一SQL语句的写法对于以下两句SQL语句程序员认为是相同的数据库查询优化器认为是不同的。select * from dualselect * From dual其实就是大小写不同查询分析器就认为是两句不同的SQL语句必须进行两次解析。生成2个执行计划。所以作为程序员应该保证相同的查询语句在任何地方都一致多一个空格都不行3、不要把SQL语句写得太复杂我经常看到从数据库中捕捉到的一条SQL语句打印出来有2张A4纸这么长。一般来说这么复杂的语句通常都是有问题的。我拿着这2页长的SQL语句去请教原作者结果他说时间太长他一时也看不懂了。可想而知连原作者都有可能看糊涂的SQL语句数据库也一样会看糊涂。一般将一个Select语句的结果作为子集然后从该子集中再进行查询这种一层嵌套语句还是比较常见的但是根据经验超过3层嵌套查询优化器就很容易给出错误的执行计划。因为它被绕晕了。像这种类似人工智能的东西终究比人的分辨力要差些如果人都看晕了我可以保证数据库也会晕的。另外执行计划是可以被重用的越简单的SQL语句被重用的可能性越高。而复杂的SQL语句只要有一个字符发生变化就必须重新解析然后再把这一大堆垃圾塞在内存里。可想而知数据库的效率会何等低下。4、使用“临时表”暂存中间结果简化SQL语句的重要方法就是采用临时表暂存中间结果但是临时表的好处远远不止这些将临时结果暂存在临时表后面的查询就在tempdb中了这可以避免程序中多次扫描主表也大大减少了程序执行中“共享锁”阻塞“更新锁”减少了阻塞提高了并发性能。5、 OLTP系统SQL语句必须采用绑定变量 select * from orderheader where changetime ’2010-10-20 00:00:01′select * from orderheader where changetime ’2010-09-22 00:00:01′以上两句语句查询优化器认为是不同的SQL语句需要解析两次。如果采用绑定变量select * from orderheader where changetime chgtimechgtime变量可以传入任何值这样大量的类似查询可以重用该执行计划了这可以大大降低数据库解析SQL语句的负担。一次解析多次重用是提高数据库效率的原则。6、绑定变量窥测事物都存在两面性绑定变量对大多数OLTP处理是适用的但是也有例外。比如在where条件中的字段是“倾斜字段”的时候。“倾斜字段”指该列中的绝大多数的值都是相同的一张人口调查表其中“民族”这列90%以上都是汉族。那么如果一个SQL语句要查询30岁的汉族人口有多少那“民族”这列必然要被放在where条件中。这个时候如果采用绑定变量nation会存在很大问题。试想如果nation传入的第一个值是“汉族”那整个执行计划必然会选择表扫描。然后第二个值传入的是“布依族”按理说“布依族”占的比例可能只有万分之一应该采用索引查找。但是由于重用了第一次解析的“汉族”的那个执行计划那么第二次也将采用表扫描方式。这个问题就是著名的“绑定变量窥测”建议对于“倾斜字段”不要采用绑定变量。7、 只在必要的情况下才使用begin tranSQL Server中一句SQL语句默认就是一个事务在该语句执行完成后也是默认commit的。其实这就是begin tran的一个最小化的形式好比在每句语句开头隐含了一个begin tran结束时隐含了一个commit。有些情况下我们需要显式声明begin tran比如做“插、删、改”操作需要同时修改几个表要求要么几个表都修改成功要么都不成功。begin tran 可以起到这样的作用它可以把若干SQL语句套在一起执行最后再一起commit。好处是保证了数据的一致性但任何事情都不是完美无缺的。Begin tran付出的代价是在提交之前所有SQL语句锁住的资源都不能释放直到commit掉。可见如果Begin tran套住的SQL语句太多那数据库的性能就糟糕了。在该大事务提交之前必然会阻塞别的语句造成block很多。Begin tran使用的原则是在保证数据一致性的前提下begin tran 套住的SQL语句越少越好有些情况下可以采用触发器同步数据不一定要用begin tran。8、一些SQL查询语句应加上nolock在SQL语句中加nolock是提高SQL Server并发性能的重要手段在oracle中并不需要这样做因为oracle的结构更为合理有undo表空间保存“数据前影”该数据如果在修改中还未commit那么你读到的是它修改之前的副本该副本放在undo表空间中。这样oracle的读、写可以做到互不影响这也是oracle 广受称赞的地方。SQL Server 的读、写是会相互阻塞的为了提高并发性能对于一些查询可以加上nolock这样读的时候可以允许写但缺点是可能读到未提交的脏数据。 使用 nolock有3条原则。(1) 查询的结果用于“插、删、改”的不能加nolock (2) 查询的表属于频繁发生页分裂的慎用nolock (3) 使用临时表一样可以保存“数据前影”起到类似oracle的undo表空间的功能能采用临时表提高并发性能的不要用nolock 。9、聚集索引没有建在表的顺序字段上该表容易发生页分裂比如订单表有订单编号orderid也有客户编号contactid那么聚集索引应该加在哪个字段上呢对于该表订单编号是顺序添加的如果在orderid上加聚集索引新增的行都是添加在末尾这样不容易经常产生页分裂。然而由于大多数查询都是根据客户编号来查的因此将聚集索引加在contactid上才有意义。而contactid对于订单表而言并非顺序字段。比如“张三”的“contactid”是001那么“张三”的订单信息必须都放在这张表的第一个数据页上如果今天“张三”新下了一个订单那该订单信息不能放在表的最后一页而是第一页如果第一页放满了呢很抱歉该表所有数据都要往后移动为这条记录腾地方。SQL Server的索引和Oracle的索引是不同的SQL Server的聚集索引实际上是对表按照聚集索引字段的顺序进行了排序相当于oracle的索引组织表。SQL Server的聚集索引就是表本身的一种组织形式所以它的效率是非常高的。也正因为此插入一条记录它的位置不是随便放的而是要按照顺序放在该放的数据页如果那个数据页没有空间了就引起了页分裂。所以很显然聚集索引没有建在表的顺序字段上该表容易发生页分裂。曾经碰到过一个情况一位哥们的某张表重建索引后插入的效率大幅下降了。估计情况大概是这样的。该表的聚集索引可能没有建在表的顺序字段上该表经常被归档所以该表的数据是以一种稀疏状态存在的。比如张三下过20张订单而最近3个月的订单只有5张归档策略是保留3个月数据那么张三过去的 15张订单已经被归档留下15个空位可以在insert发生时重新被利用。在这种情况下由于有空位可以利用就不会发生页分裂。但是查询性能会比较低因为查询时必须扫描那些没有数据的空位。重建聚集索引后情况改变了因为重建聚集索引就是把表中的数据重新排列一遍原来的空位没有了而页的填充率又很高插入数据经常要发生页分裂所以性能大幅下降。对于聚集索引没有建在顺序字段上的表是否要给与比较低的页填充率是否要避免重建聚集索引是一个值得考虑的问题10、加nolock后查询经常发生页分裂的表容易产生跳读或重复读加nolock后可以在“插、删、改”的同时进行查询但是由于同时发生“插、删、改”在某些情况下一旦该数据页满了那么页分裂不可避免而此时nolock的查询正在发生比如在第100页已经读过的记录可能会因为页分裂而分到第101页这有可能使得nolock查询在读101页时重复读到该条数据产生“重复读”。同理如果在100页上的数据还没被读到就分到99页去了那nolock查询有可能会漏过该记录产生“跳读”。上面提到的哥们在加了nolock后一些操作出现报错估计有可能因为nolock查询产生了重复读2条相同的记录去插入别的表当然会发生主键冲突。11、使用like进行模糊查询时应注意有的时候会需要进行一些模糊查询比如select * from contact where username like ‘%yue%’关键词%yue%由于yue前面用到了“%”因此该查询必然走全表扫描除非必要否则不要在关键词前加%12、数据类型的隐式转换对查询效率的影响sql server2000的数据库一的程序在提交sql语句的时候没有使用强类型提交这个字段的值由sql server 2000自动转换数据类型会导致传入的参数与主键字段类型不一致这个时候sql server 2000可能就会使用全表扫描。Sql2005上没有发现这种问题但是还是应该注意一下。13、SQL Server 表连接的三种方式(1) Merge Join(2) Nested Loop Join(3) Hash JoinSQL Server 2000只有一种join方式——Nested Loop Join如果A结果集较小那就默认作为外表A中每条记录都要去B中扫描一遍实际扫过的行数相当于A结果集行数x B结果集行数。所以如果两个结果集都很大那Join的结果很糟糕。SQL Server 2005新增了Merge Join如果A表和B表的连接字段正好是聚集索引所在字段那么表的顺序已经排好只要两边拼上去就行了这种join的开销相当于A表的结果集行数加上B表的结果集行数一个是加一个是乘可见merge join 的效果要比Nested Loop Join好多了。如果连接的字段上没有索引那SQL2000的效率是相当低的而SQL2005提供了Hash join相当于临时给AB表的结果集加上索引因此SQL2005的效率比SQL2000有很大提高我认为这是一个重要的原因。总结一下在表连接时要注意以下几点(1) 连接字段尽量选择聚集索引所在的字段(2) 仔细考虑where条件尽量减小A、B表的结果集(3) 如果很多join的连接字段都缺少索引而你还在用SQL Server 2000赶紧升级吧。来自web开发者
http://www.pierceye.com/news/264444/

相关文章:

  • 合肥优化网站福州网站设计
  • 企业网站制作前期需要什么资料网站 月15g流量够用吗
  • 网络营销网站建设ppt环艺做网站
  • 手机建设银行官方网站网站开发要点
  • 做简历的网站有随州网站建设学校
  • 深圳建设网站企业青白江做网站的公司
  • dm网站制作软件无忧网站建设
  • 如何在自己的网站上做歌单王建设医生网站
  • 科技+杭州+网站建设做效果图的网站有哪些
  • 引流推广网站平台wordpress页面发布失败
  • 南京哪家网站建设好网站开发需要注意的
  • 一个综合网站上线多少钱wordpress粘贴word
  • 承接电商网站建设新手做自己的网站
  • 网页版视频网站建设需要多少钱四川鸿业建设集团公司网站
  • h5网站实例wordpress改造mip
  • 完整的网络营销推广方案包括优化营商环境心得体会个人
  • 商洛市住房和城乡建设局网站建免费网站
  • 做网站要多少的服务器网站设计的步骤
  • 网站关键词怎么做上首页wordpress 架构原理
  • 厦门专业网站建设代理国外在线crm系统suitecrm
  • 哪个网站可以领手工活在家做wordpress heroku
  • 为什么没有网站做图文小说电子商务网站开发的课程介绍
  • 在哪个网站做问卷好单页面网站推广
  • 专业网站建设模块维护静海网站建设
  • 国内前十网站建设公司龙之网官网
  • 昆山做网站的公昆山做网站的公司司网站开发与设计岗位职责
  • 网站投注员怎么做做旅游项目用哪家网站好
  • 环县网站怎么做咸阳网站开发公司地址
  • 重庆巴南网站制作wordpress外贸建站公司
  • 桂林旅游网站制作公司软件开发公司属于什么行业