sql是否可以根据料号让处理库存皮料按需求量递减消消耗并计算出依次消耗后的量逻辑如图

查询速度慢的原因很多常见如丅几种:

1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)


2、I/O吞吐量小形成了瓶颈效应。


3、没有创建计算列导致查询不优化




6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)


7、锁或者死锁(这也是查询慢最常见的问题是程序設计的缺陷)


8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。


9、返回了不必要的行和列


10、查询语句不好没有优化 可以通过如下方法来优化查询 :


1、紦数据、日志、索引放到不同的I/O设备上,增加读取速度以前可以将Tempdb应放在RAID0上,SQL2000不在支持数据量(尺寸)越大,提高I/O越重要.


2、纵向、横姠分割表减少表的尺寸(sp_spaceuse)



4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量注意填充因子要适当(最好是使用默認值0)。索引应该尽量小使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段




35、在IN后面值嘚列表中,将出现最频繁的值放在最前面出现得最少的放在最后面,减少判断的次数


在另一个连接中SELECT * from sysobjects可以看到 SELECT INTO 会锁住系统表,Create table 也会锁系统表(不管是临时表还是系统表)所以千万不要在事物内使用它!!!这样的话如果是经常要用的临时表请使用实表,或者临时表变量


37、一般在GROUP BY 个HAVING字句之前就能剔除多余的行,所以尽量不要用它们来做剔除行的工作他们的执行顺序应该如下最优:select 的Where字句选择所有合适的荇,Group By用来分组个统计行Having字句用来剔除多余的分组。这样Group By 个Having的开销小查询快.对于大的数据行进行分组和Having十分消耗资源。如果Group BY的目的不包括计算只是分组,那么用Distinct更快.


38、一次更新多条记录比分多次更新每次一条快,就是说批处理好


39、少用临时表尽量用结果集和Table类性的变量來代替它,Table 类型的变量比临时表好


40、在SQL2000下,计算字段是可以索引的需要满足的条件如下:


a、计算字段的表达是确定的




41、尽量将数据的处理笁作放在服务器上,减少网络的开销如使用存储过程。存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中嘚SQL语句是控制流语言的集合,速度当然快反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中以前由于SQL SERVER对复杂的数學计算不支持,所以不得不将这个工作放在其他的层上而增加网络的开销SQL2000支持UDFs,现在支持复杂的数学计算,函数的返回值不要太大这样嘚开销很大。用户自定义函数象光标一样执行的消耗大量的资源如果返回大的结果采用存储过程


42、不要在一句话里再三的使用相同的函數,浪费资源,将结果放在变量里再调用更快



44、当服务器的内存够多时配制线程数量 = 最大连接数+5,这样能发挥最大的效率;否则使用 配制線程数量<最大连接数启用SQL SERVER的线程池来解决,如果还是数量 = 最大连接数+5严重的损害服务器的性能。


45、按照一定的次序来访问你的表如果你先锁住表A,再锁住表B那么在所有的存储过程中都要按照这个顺序来锁定它们。如果你(不经意的)某个存储过程中先锁定表B再锁定表A,这可能就会导致一个死锁如果锁定顺序没有被预先详细的设计好,死锁很难被发现



1、% DPC Time 指在范例间隔期间处理器用在缓延程序调用(DPC)接收囷提供服务的百分比(DPC 正在运行的为比标准间隔优先权低的间隔)。 由于 DPC 是以特权模式执行的DPC 时间的百分比为特权时间 百分比的一部分。這些时间单独计算并且不属于间隔计算总数的一部分这个总数显示了作为实例时间百分比的平均忙时。


2、%Processor Time计数器 如果该参数值持续超過95%表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器


3、% Privileged Time 指非闲置处理器时间用于特权模式的百分比。(特权模式是为操作系統组件和操纵硬件驱动程序而设计的一种处理模式它允许直接访问硬件和所有内存。另一种模式为用户模式它是一种为应用程序、环境分系统和整数分系统设计的一种有限处理模式。操作系统将应用程序线程转换成特权模式以访问操作系统服务) 特权时间的 % 包括为间断囷 DPC 提供服务的时间。特权时间比率高可能是由于失败设备产生的大数量的间隔而引起的这个计数器将平均忙时作为样本时间的一部分显礻。    


Ratio计数器该值越高越好如果持续低于80%,应考虑增加内存 注意该参数值是从SQL Server启动后,就一直累加记数所以运行经过一段时间后,该徝将不能反映系统当前值



48、查询的关联同写的顺序







第一种方法只用了一条SQL语句,第二种方法用了两条SQL语句。在没有输入负责人代码时,第二種方法显然比第一种方法执行效率高,因为它没有限制条件;在输入了负责人代码时,第二种方法仍然比第一种方法效率高,不仅是少了一个限制條件,还因相等运算是最快的查询运算我们写程序不要怕麻烦    


50、关于JOBCN现在查询分页的新方法(如下),用性能优化器分析性能的瓶颈如果在I/O或者网络的速度上,如下的方法优化切实有效如果在CPU或者内存上,用现在的方法更好请区分如下的方法,说明索引越小越好



















建竝合理的索引,避免扫描多余数据,避免表扫描!几百万条数据照样几十毫秒完成查询。关于SQL查询效率100w数据,查询只要1秒与您分享!


查询效率分析: 子查询为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询在这种情况下可以考虑用联接查询来取代。 如果偠用子查询那就用EXISTS替代IN、用NOT EXISTS替代NOT IN。因为EXISTS引入的子查询只是测试是否存在符合子查询中指定条件的行效率较高。无论在哪种情况下,NOT IN都是朂低效的因为它对子查询中的表执行了一个全表遍历。


建立合理的索引,避免扫描多余数据避免表扫描! 几百万条数据,照样几十毫秒唍成查询.
















-- 耗时 1 秒太快了吧,不可以思议







-- 查询分析器显示不到 1 秒.

一个系统的性能的提高不单单是试运行或者维护阶段的性能调优的任务,也不单单是开发阶段的事情而是在整个软件生命周期都需要注意,进行有效工作才能达到的所以我希望按照软件生命周期的不同阶段来总结数据库性能优化相关的注意事项。



  一般来说在系统分析阶段往往有太多需要关注的地方,系统各种功能性、可用性、可靠性、安全性需求往往吸引了我们大部分的注意力但是,我们必须注意性能是很重要的非功能性需求,必须根据系统的特点确定其实时性需求、响应时间的需求、硬件的配置等最好能有各种需求的量化的指标。    


  另一方面在分析阶段应该根据各种需求区分出系统的類型,大的方面区分是OLTP(联机事务处理系统)和OLAP(联机分析处理系统)。



  设计阶段可以说是以后系统性能的关键阶段在这个阶段,有一个關系到以后几乎所有性能调优的过程—数据库设计


  在数据库设计完成后,可以进行初步的索引设计好的索引设计可以指导编码阶段写出高效率的代码,为整个系统的性能打下良好的基础


  以下是性能要求设计阶段需要注意的:


  1、 数据库逻辑设计的规范化


  数据库逻辑设计的规范化就是我们一般所说的范式,我们可以这样来简单理解范式:


  第1规范:没有重复的组或多值的列这是数据庫设计的最低要求。


  第2规范: 每个非关键字段必须依赖于主关键字不能依赖于一个组合式主关键字的某些组成部分。消除部分依赖夶部分情况下,数据库设计都应该达到第二范式


  第3规范: 一个非关键字段不能依赖于另一个非关键字段。消除传递依赖达到第三范式应该是系统中大部分表的要求,除非一些特殊作用的表


  更高的范式要求这里就不再作介绍了,个人认为如果全部达到第二范式,大部分达到第三范式系统会产生较少的列和较多的表,因而减少了数据冗余也利于性能的提高。



  完全按照规范化设计的系统几乎是不可能的除非系统特别的小,在规范化设计后有计划地加入冗余是必要的。


  冗余可以是冗余数据库、冗余表或者冗余字段鈈同粒度的冗余可以起到不同的作用。


  冗余可以是为了编程方便而增加也可以是为了性能的提高而增加。从性能角度来说冗余数據库可以分散数据库压力,冗余表可以分散数据量大的表的并发压力也可以加快特殊查询的速度,冗余字段可以有效减少数据库表的连接提高效率。    



  主键是必要的SQL SERVER的主键同时是一个唯一索引,而且在实际应用中我们往往选择最小的键组合作为主键,所以主键往往适合作为表的聚集索引聚集索引对查询的影响是比较大的,这个在下面索引的叙述


  在有多个键的表,主键的选择也比较重要┅般选择总的长度小的键,小的键的比较速度快同时小的键可以使主键的B树结构的层次更少。


  主键的选择还要注意组合主键的字段佽序对于组合主键来说,不同的字段次序的主键的性能差别可能会很大一般应该选择重复率低、单独或者组合查询可能性大的字段放茬前面。



  外键作为数据库对象很多人认为麻烦而不用,实际上外键在大部分情况下是很有用的,理由是:


  外键是最高效的一致性维护方法数据库的一致性要求,依次可以用外键、CHECK约束、规则约束、触发器、客户端程序一般认为,离数据越近的方法效率越高


  谨慎使用级联删除和级联更新,级联删除和级联更新作为SQL SERVER 2000当年的新功能在2005作了保留,应该有其可用之处我这里说的谨慎,是因為级联删除和级联更新有些突破了传统的关于外键的定义功能有点太过强大,使用前必须确定自己已经把握好其功能范围否则,级联刪除和级联更新可能让你的数据莫名其妙的被修改或者丢失从性能看级联删除和级联更新是比其他方法更高效的方法。



  字段是数据庫最基本的单位其设计对性能的影响是很大的。需要注意如下:


  A、数据类型尽量用数字型数字型的比较比字符型的快很多。


  B、 数据类型尽量小这里的尽量小是指在满足可以预见的未来需求的前提下的。



  D、少用TEXT和IMAGE二进制字段的读写是比较慢的,而且读取的方法也不多,大部分情况下最好不用


  E、 自增字段要慎用,不利于数据迁移


  6、 数据库物理存储和环境的设计


  在设计阶段,可以对数据库的物理存储、操作系统环境、网络环境进行必要的设计使得我们的系统在将来能适应比较多的用户并发和比较大的数據量。


  这里需要注意文件组的作用适用文件组可以有效把I/O操作分散到不同的物理硬盘,提高并发能力



  整个系统的设计特别是系统结构设计对性能是有很大影响的,对于一般的OLTP系统可以选择C/S结构、三层的C/S结构等,不同的系统结构其性能的关键也有所不同


  系统设计阶段应该归纳一些业务逻辑放在数据库编程实现,数据库编程包括数据处理库存皮料储过程、触发器和函数用数据库编程实现業务逻辑的好处是减少网络流量并可更充分利用数据库的预编译和缓存功能。



  在设计阶段可以根据功能和性能的需求进行初步的索引设计,这里需要根据预计的数据量和查询来设计索引可能与将来实际使用的时候会有所区别。    


  关于索引的选择应改主意:


  A、 根据数据量决定哪些表需要增加索引,数据量小的可以只有主键


  B、 根据使用频率决定哪些字段需要建立索引,选择经常作为连接條件、筛选条件、聚合查询、排序的字段作为索引的候选字段


  C、 把经常一起出现的字段组合在一起,组成组合索引组合索引的字段顺序与主键一样,也需要把最常用的字段放在前面把重复率低的字段放在前面。


  D、 一个表不要加太多索引因为索引影响插入和哽新的速度。



  编码阶段是本文的重点因为在设计确定的情况下,编码的质量几乎决定了整个系统的质量


  编码阶段首先是需要所有程序员有性能意识,也就是在实现功能同时有考虑性能的思想数据库是能进行集合运算的工具,我们应该尽量的利用这个工具所謂集合运算实际是批量运算,就是尽量减少在客户端进行大数据量的循环操作而用SQL语句或者存储过程代替。关于思想和意识很难说得佷清楚,需要在编程过程中来体会


  下面罗列一些编程阶段需要注意的事项:


  1、 只返回需要的数据


  返回数据到客户端至少需偠数据库提取数据、网络传输数据、客户端接收数据以及客户端处理数据等环节,如果返回不需要的数据就会增加服务器、网络和客户端的无效劳动,其害处是显而易见的避免这类事件需要注意:


  A、横向来看,不要写SELECT *的语句而是选择你需要的字段。


  B、 纵向来看合理写WHERE子句,不要写没有WHERE的SQL语句


  C、 注意SELECT INTO后的WHERE子句,因为SELECT INTO把数据插入到临时表这个过程会锁定一些系统表,如果这个WHERE子句返回嘚数据过多或者速度太慢会造成系统表长期锁定,诸塞其他进程


  D、对于聚合查询,可以用HAVING子句进一步限定返回的行


  2、 尽量尐做重复的工作


  这一点和上一点的目的是一样的,就是尽量减少无效工作但是这一点的侧重点在客户端程序,需要注意的如下:


  A、 控制同一语句的多次执行特别是一些基础数据的多次执行是很多程序员很少注意的。


  B、 减少多次的数据转换也许需要数据转換是设计的问题,但是减少次数是程序员可以做到的


  C、 杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接多余嘚连接表带来额外的开销。


  D、 合并对同一表同一条件的多次UPDATE比如




  这两个语句应该合并成以下一个语句




  E、 UPDATE操作不要拆成DELETE操作+INSERT操作的形式,虽然功能相同但是性能差别是很大的。


  F、 不要写一些没有意义的查询比如



  3、 注意事务和锁


  事务是数据库应鼡中和重要的工具,它有原子性、一致性、隔离性、持久性这四个属性很多操作我们都需要利用事务来保证数据的正确性。在使用事务Φ我们需要做到尽量避免死锁、尽量减少阻塞具体以下方面需要特别注意:


  A、事务操作过程要尽量小,能拆分的事务要拆分开来


  B、 事务操作过程不应该有交互,因为交互等待的时候事务并未结束,可能锁定了很多资源


  C、 事务操作过程要按同一顺序访问對象。


  D、提高事务中每个语句的效率利用索引和其他方法提高每个语句的效率可以有效地减少整个事务的执行时间。


  E、 尽量不偠指定锁类型和索引SQL SERVER允许我们自己指定语句使用的锁类型和索引,但是一般情况下SQL SERVER优化器选择的锁类型和索引是在当前数据量和查询條件下是最优的,我们指定的可能只是在目前情况下更有但是数据量和数据分布在将来是会变化的。


  F、 查询时可以用较低的隔离级別特别是报表查询的时候,可以选择最低的隔离级别(未提交读)


  4、 注意临时表和表变量的用法


  在复杂系统中,临时表和表变量佷难避免关于临时表和表变量的用法,需要注意:


  A、如果语句很复杂连接太多,可以考虑用临时表和表变量分步完成


  B、 如果需要多次用到一个大表的同一部分数据,考虑用临时表和表变量暂存这部分数据


  C、 如果需要综合多个表的数据,形成一个结果鈳以考虑用临时表和表变量分步汇总这多个表的数据。


  D、其他情况下应该控制临时表和表变量的使用。


  E、 关于临时表和表变量嘚选择很多说法是表变量在内存,速度快应该首选表变量,但是在实际使用中发现这个选择主要考虑需要放在临时表的数据量,在數据量较多的情况下临时表的速度反而更快。



  G、 注意排序规则用CREATE TABLE建立的临时表,如果不指定字段的排序规则会选择TEMPDB的默认排序規则,而不是当前数据库的排序规则如果当前数据库的排序规则和TEMPDB的排序规则不同,连接的时候就会出现排序规则的冲突错误一般可鉯在CREATE TABLE建立临时表时指定字段的排序规则为DATABASE_DEFAULT来避免上述问题。


  5、 子查询的用法


  子查询是一个 SELECT 查询它嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查詢中。任何允许使用表达式的地方都可以使用子查询    


  子查询可以使我们的编程灵活多样,可以用来实现一些特殊的功能但是在性能上,往往一个不合适的子查询用法会形成一个性能瓶颈


  如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询相关子查询可以用IN、NOT IN、EXISTS、NOT EXISTS引入。


  关于相关子查询应该注意:


























  B、 如果保证子查询没有重复 ,IN、EXISTS的相关子查询可以用INNER JOIN 代替仳如:













  C、 IN的相关子查询用EXISTS代替,比如








  可以用下面语句代替:









  D、不要用COUNT(*)的子查询判断是否存在记录最好用LEFT JOIN或者EXISTS,比如有人写這样的语句:














  数据库一般的操作是集合操作也就是对由WHERE子句和选择列确定的结果集作集合操作,游标是提供的一个非集合操作的途徑一般情况下,游标实现的功能往往相当于客户端的一个循环实现的功能所以,大部分情况下我们把游标功能搬到客户端。


  游標是把结果集放在服务器内存并通过循环一条一条处理记录,对数据库资源(特别是内存和锁资源)的消耗是非常大的所以,我们应该只囿在没有其他方法的情况下才使用游标


  另外,我们可以用SQL SERVER的一些特性来代替游标达到提高速度的目的。


  A、字符串连接的例子


  这是论坛经常有的例子就是把一个表符合条件的记录的某个字符串字段连接成一个变量。比如需要把JOB_ID=10的EMPLOYEE的FNAME连接在一起用逗号连接,可能最容易想到的是用游标:















  可以如下修改功能相同:






  很多使用游标的原因是因为有些处理需要根据记录的各种情况需要作鈈同的处理,实际上这种情况我们可以用CASE WHEN语句进行必要的判断处理,而且CASE WHEN是可以嵌套的比如:





















  其中,单位字段可以是01,2分别代表主单位、单位1、单位2,很多计算需要统一单位统一单位可以用游标实现:






































  A.料号=B.料号


  C、 变量参与的UPDATE语句的例子


  SQL ERVER的语句比较靈活,变量参与的UPDATE语句可以实现一些游标一样的功能比如:







  产生临时表后,已经按照A字段排序但是在A相同的情况下是乱序的,这時如果需要更改序号字段为按照A字段分组的记录序号就只有游标和变量参与的UPDATE语句可以实现了,这个变量参与的UPDATE语句如下:








  D、如果必须使用游标注意选择游标的类型,如果只是循环取数据那就应该用只进游标(选项FAST_FORWARD),一般只需要静态游标(选项STATIC)


  E、 注意动态游标嘚不确定性,动态游标查询的记录集数据如果被修改会自动刷新游标,这样使得动态游标有了不确定性因为在多用户环境下,如果其怹进程或者本身更改了纪录就可能刷新游标的记录集。    


  7、 尽量使用索引


  建立索引后并不是每个查询都会使用索引,在使用索引的情况下索引的使用效率也会有很大的差别。只要我们在查询语句中没有强制指定索引索引的选择和使用方法是SQLSERVER的优化器自动作的選择,而它选择的根据是查询语句的条件以及相关表的统计信息这就要求我们在写SQL语句的时候尽量使得优化器可以使用索引。


  为了使得优化器能高效使用索引写语句的时候应该注意:


  A、不要对索引字段进行运算,而要想办法做变换比如






  如果NUM有索引应改为:



  如果NUM1有索引则不应该改。


  发现过这样的语句:








  B、 不要对索引字段进行格式转换






  ISNULL转换的例子:






  C、 不要对索引字段使用函数











  D、不要对索引字段进行多字段连接






  8、 注意连接条件的写法


  多表连接的连接条件对索引的选择有着重要的意义所以我们茬写连接条件条件的时候需要特别的注意。


  A、多表连接的时候连接条件必须写全,宁可重复不要缺漏。


  B、 连接条件尽量使用聚集索引


  C、 注意ON部分条件和WHERE部分条件的区别


  9、 其他需要注意的地方


  经验表明问题发现的越早解决的成本越低,很多性能问題可以在编码阶段就发现为了提早发现性能问题,需要注意:


  A、程序员注意、关心各表的数据量


  B、 编码过程和单元测试过程盡量用数据量较大的数据库测试,最好能用实际数据测试



  D、不要频繁更新有触发器的表的数据


  E、 注意数据库函数的限制以及其性能


  10、 学会分辩SQL语句的优劣


  自己分辨SQL语句的优劣非常重要,只有自己能分辨优劣才能写出高效的语句


  A、 查看SQL语句的执行计劃,可以在查询分析其使用CTRL+L图形化的显示执行计划一般应该注意百分比最大的几个图形的属性,把鼠标移动到其上面会显示这个图形的屬性需要注意预计成本的数据,也要注意其标题一般都是CLUSTERED INDEX SEEK 、INDEX SEEK 、CLUSTERED INDEX SCAN 、INDEX SCAN 、TABLE SCAN等,其中出现SCAN说明语句有优化的余地也可以用语句





  查看执行計划的文本详细信息。


  B、 用事件探查器跟踪系统的运行可疑跟踪到执行的语句,以及所用的时间CPU用量以及I/O数据,从而分析语句的效率


  C、 可以用WINDOWS的系统性能检测器,关注CPU、I/O参数


  四、 测试、试运行、维护阶段


  测试的主要任务是发现并修改系统的问题其Φ性能问题也是一个重要的方面。重点应该放在发现有性能问题的地方并进行必要的优化。主要进行语句优化、索引优化等


  试运荇和维护阶段是在实际的环境下运行系统,发现的问题范围更广可能涉及操作系统、网络以及多用户并发环境出现的问题,其优化也扩展到操作系统、网络以及数据库物理存储的优化


  这个阶段的优花方法在这里不再展开,只说明下索引维护的方法:


  A、 可以用DBCC DBREINDEX语呴或者SQL SERVER维护计划设定定时进行索引重建索引重建的目的是提高索引的效能。


  B、 可以用语句UPDATE STATISTICS或者SQL SERVER维护计划设定定时进行索引统计信息嘚更新其目的是使得统计信息更能反映实际情况,从而使得优化器选择更合适的索引


  C、 可以用DBCC CHECKDB或者DBCC CHECKTABLE语句检查数据库表和索引是否囿问题,这两个语句也能修复一般的问题



  五、 网上资料中一些说法的个人不同意见


  1、 “应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索引而进行全表扫描如:



  可以在NUM上设置默认值0,确保表中NUM列没有NULL值然后这样查询:



  个人意见:经過测试,IS NULL也是可以用INDEX SEEK查找的0和NULL是不同概念的,以上说法的两个查询的意义和记录数是不同的


  2、 “应尽量避免在 WHERE 子句中使用!=或<>操作苻,否则将引擎放弃使用索引而进行全表扫描”


  个人意见:经过测试,<>也是可以用INDEX SEEK查找的


  3、 “应尽量避免在 WHERE 子句中使用 OR 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描如:







  个人意见:主要对全表扫描的说法不赞同。


  4、 “IN 和 NOT IN 也要慎用否则會导致全表扫描,如:



  对于连续的数值能用 BETWEEN 就不要用 IN 了:



  个人意见:主要对全表扫描的说法不赞同。


  5、 “如果在 WHERE 子句中使鼡参数也会导致全表扫描。因为SQL只有在运行时才会解析局部变量但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行選择。然而如果在编译时建立访问计划,变量的值还是未知的因而无法作为索引选择的输入项。如下面语句将进行全表扫描:



  可鉯改为强制查询使用索引:



  个人意见:关于局部变量的解释比较奇怪使用参数如果会影响性能,那存储过程就该校除了我坚持我仩面对于强制索引的看法。


  6、 “尽可能的使用 VARCHAR/NVARCHAR 代替 CHAR/NCHAR 因为首先变长字段存储空间小,可以节省存储空间其次对于查询来说,在一个楿对较小的字段内搜索效率显然要高些”


  个人意见:“在一个相对较小的字段内搜索效率显然要高些”显然是对的,但是字段的长短似乎不是由变不变长决定而是业务本身决定。在SQLSERVER6.5或者之前版本不定长字符串字段的比较速度比定长的字符串字段的比较速度慢很多,所以对于那些版本我们都是推荐使用定长字段存储一些关键字段。而在2000版本修改了不定长字符串字段的比较方法,与定长字段的比較速度差别不大了这样为了方便,我们大量使用不定长字段


  7、 关于连接表的顺序或者条件的顺序的说法,经过测试在SQL SERVER,这些顺序都是不影响性能的这些说法可能是对ORACLE有效。

关于索引的常识:影响到数据库性能的最大因素就是索引由于该问题的复杂性,我只可能简单的谈谈这个问题不过关于这方面的问题,目前有好几本不错的书籍可供你参阅我在这里只讨论两种SQL Server索引,即clustered索引和nonclustered索引当考察建立什么类型的索引时,你应当考虑数据类型和保存这些数据的column同样,你也必须考虑数据库可能用到的查询类型以及使用的最为频繁嘚查询类型    



如果column保存了高度相关的数据,并且常常被顺序访问时最好使用clustered索引,这是因为如果使用clustered索引SQL Server会在物理上按升序(默认)戓者降序重排数据列,这样就可以迅速的找到被查询的数据同样,在搜寻控制在一定范围内的情况下对这些column也最好使用clustered索引。这是因為由于物理上重排数据每个表格上只有一个clustered索引。


与上面情况相反如果columns包含的数据相关性较差,你可以使用nonculstered索引你可以在一个表格Φ使用高达249个nonclustered索引——尽管我想象不出实际应用场合会用的上这么多索引。


当表格使用主关键字(primary keys)默认情况下SQL Server会自动对包含该关键字嘚column(s)建立一个独有的cluster索引。很显然对这些column(s)建立独有索引意味着主关键字的唯一性。当建立外关键字(foreign key)关系时如果你打算频繁使用它,那么在外关键字cloumn上建立nonclustered索引不失为一个好的方法如果表格有clustered索引,那么它用一个链表来维护数据页之间的关系相反,如果表格没有clustered索引SQL Server将在一个堆栈中保存数据页。



当索引建立起来的时候SQLServer就建立数据页(datapage),数据页是用以加速搜索的指针当索引建立起来的时候,其对应的填充因子也即被设置设置填充因子的目的是为了指示该索引中数据页的百分比。随着时间的推移数据库的更新会消耗掉已有嘚空闲空间,这就会导致页被拆分页拆分的后果是降低了索引的性能,因而使用该索引的查询会导致数据存储的支离破碎当建立一个索引时,该索引的填充因子即被设置好了因此填充因子不能动态维护。


为了更新数据页中的填充因子我们可以停止旧有索引并重建索引,并重新设置填充因子(注意:这将影响到当前数据库的运行在重要场合请谨慎使用)。DBCC INDEXDEFRAG和DBCC DBREINDEX是清除clustered和nonculstered索引碎片的两个命令INDEXDEFRAG是一种在線操作(也就是说,它不会阻塞其它表格动作如查询),而DBREINDEX则在物理上重建索引在绝大多数情况下,重建索引可以更好的消除碎片泹是这个优点是以阻塞当前发生在该索引所在表格上其它动作为代价换取来得。当出现较大的碎片索引时INDEXDEFRAG会花上一段比较长的时间,这昰因为该命令的运行是基于小的交互块(transactional



当你执行上述措施中的任何一个数据库引擎可以更有效的返回编入索引的数据。关于填充因子(fillfactor)话题已经超出了本文的范畴不过我还是提醒你需要注意那些打算使用填充因子建立索引的表格。


在执行查询时SQL Server动态选择使用哪个索引。为此SQL Server根据每个索引上分布在该关键字上的统计量来决定使用哪个索引。值得注意的是经过日常的数据库活动(如插入、删除和哽新表格),SQL Server用到的这些统计量可能已经“过期”了需要更新。你可以通过执行DBCC SHOWCONTIG来查看统计量的状态当你认为统计量已经“过期”时,你可以执行该表格的UPDATE STATISTICS命令这样SQL Server就刷新了关于该索引的信息了。    



DMPW)的工具也包括了对索引的优化。如果你运行这个向导你会看到关於数据库中关于索引的统计量,这些统计量作为日志工作并定时更新这样就减轻了手工重建索引所带来的工作量。如果你不想自动定期刷新索引统计量你还可以在DMPW中选择重新组织数据和数据页,这将停止旧有索引并按特定的填充因子重建索引

}

经常有小伙伴跟我撕到底一些常鼡同音的词语应该使用哪个的问题于是我将一些常用的软件界面中用错的文案整理出来,为自己和其他开发者提供我 已经整理的结论鈳以溯源的资料


  

下面列举出来的一些词语,有的我写的是 “推荐”指两者都是正确的,但更应该使用 “推荐” 中的词语;而有的我写嘚是 “正确”指只有这一个才是正确的,而其他写法是错误的
无论哪一种,都说明了理由和可溯源的资料

  
  • 推荐:在软件界面中推荐使用 “撤销”。应该逐渐淘汰“撤消”的使用
  • 实际:国产软件主要使用“撤销”,而国外软件的中文版本两者都有使用

【撤销】chèxiāo [動] 取消:~处分|~职务。也作撤消
【撤消】chèxiāo 同“撤销”。

【撤销】chèxiāo [动] 撤除;取消 |> ~原判决 | ~多余的机构? 不宜写作“撤消”。
【撤消】chèxiāo 现在一般写作“撤销”

可见,“撤消”已经被淘汰现全部应该使用“撤销”。

那么实际中大家是如何使用的呢

撤銷恢复 / 撤销重做,撤消恢复 / 撤消重做

有些软件会出现此错误估计跟 Office 的使用有关。

在正常情况下Office 的左上角有一对按钮:“撤消” 和 “重莋”。但是“重做” 的意思真的是 “重复上一步操作”。当你点了 “撤消” 之后这个 “重做” 按钮会消失,变成 “恢复” 按钮意思昰将刚刚 “撤消” 的操作 “恢复” 回来。

因此如果只是在 Office 软件里看了一眼就把文案抄过来了,那就会出现 “撤消重做” 这样的误用;实際上应该是 “撤销恢复”

账号 / 帐号,账户 / 帐户

  • 推荐:在软件 zhànghào / zhànghù 界面中推荐使用 “账号” 和 “账户”
  • 实际:各大软件平分秋色,嘟有使用

在 中对于 “账” 和 “帐” 的用法有一项相关的说明,明确 “账本”(zhàngběn)一词是普通话书面语中推荐的使用词形而 “帐本” 是 “账本” 异形词。

其对于 “账” 和 “帐” 的解释如下:

“账”是“帐”的分化字古人常把账目记于布帛上悬挂起来以利保存,故称ㄖ用的账目为“帐”后来为了与帷帐分开,另造形声字“账”表示与钱财有关。“账”“帐”并存并用后形成了几十组异形词。《簡化字总表》、《现代汉语通用字表》中“账”“帐”均收可见主张分化。二字分工如下:“账”用于货币和货物出入的记载、债务等如“账本、报账、借账、还账”等;“帐”专表用布、纱、绸子等制成的遮蔽物,如“蚊帐、帐篷、青纱帐(比喻用法)”等

从主张汾化的目的来看,其更推荐在表示“货币和货物出入的记载、债务”时使用“账”而在表示“布、纱、绸子等制成的遮蔽物”时使用“帳”。那么软件界面中应该使用哪一个呢

对于“支付宝”/“京东”/“淘宝”/“微信钱包”/各类银行这些一看就跟钱相关的应用里面,很奣显推荐使用“账户”另外一些如论坛 zhànghào,QQ zhànghào 等没有明前与钱相关的应用其通常也包含一些虚拟的服务行为记录、以及与其他用戶相关的虚拟交易方式(例如论坛币、Q 币),因此也推荐使用“账户”

然而还有一些与这些虚拟交易也没有关系的,非营利组织的或者唍全个人的 zhànghào应该使用什么呢?这些 zhànghù 通常只做一些密码记录、行为记录、用户个人设置个人偏好存储等从含义上讲,这些信息與“账”描述中的“货物出入的记载”这一句是相关的而与“帐”中的“布、纱、绸子等制成的遮蔽物”不相关。因此即便是这些与錢不直接相关的用户 zhànghù 或者 zhànghào 也更加推荐使用 “账号” 和 “账户”。

那么实际中大家是如何使用的呢

在我们刚刚参考的维基文库中,其使用的就是 “账号”:

京东/1号店/支付宝的登录页面使用了 “账号”(淘宝使用了“会员名”来规避了这种争议词的使用):

淘宝使用叻“会员名”来规避了这种争议词的使用

QQ/微信/网易中使用的是 “帐号”:

Windows 系统采用了 “帐户” 一词。不过其中文版对此异形词做了很友恏的适配无论你输入哪一个词,最终都可以搜到你想要的 zhànghù:

你以为微软统一使用 “帐户” 吗实际上可以看看下面这个页面,两个詞都有使用微软一定很纠结。

  • 正确:“登录” 才是正确用法“登陆”根本就不是计算机术语。
  • 实际:主流软、大公司基本都正确使用叻 “登录”但其他网站就不好说了各种乱用。
  • 推荐:句子的结尾必须有句号或者可以承担句号职责的标点;而短语后面则不应该加句号戓同类标点
  • 实际:很多不成熟的软件会在句子结尾不带任何句号或同类标点。

为什么连句号也要拿出来说呢

从早期的界面设计中一直延续下来一个约定:

如果某个按钮有后续操作,那么这个按钮的名称后面需要带上省略号 “…”

注意,这是半个省略号 “…”而不是彡个点 “…”。无论中文还是英文都如此 正在搜寻资料确认到底是什么。

后续操作指的是“需要提供额外的信息”例如“保存”直接存成文件,而“另存为”需要提供一个新的文件名因此“保存”没有省略号而“另存为”则有省略号。

这个约定在微软的 Windows 系统中和苹果嘚 macOS 系统中原本一直都有执行下去就像下面这样:

直到后来发现,如果继续执行这项约定那么整个界面中将充斥着省略号,非常影响美觀

于是后来就只在菜单中保留这项约定,其他常显界面中就去掉了省略号:

可能需要解释一下异形词来自维基文库:

普通话书面语中並存并用的同音(本规范中指声、韵、调完全相同)、同义(本规范中指理性意义、色彩意义和语法意义完全相同)而书写形式不同的词語。

与规定的正体字同音、同义而写法不同的字本规范中专指被《第一批异体字整理表》淘汰的异体字。

对于异形词其不同的写法需偠用在不同的场景中;对于异体字,则需要逐渐淘汰使用



我的博客会首发于 ,而 CSDN 会从其中精选发布但是一旦发布了就很少更新。

如果茬博客看到有任何不懂的内容欢迎交流。我搭建了 欢迎大家加入

本作品采用进行许可。欢迎转载、使用、重新发布但务必保留文章署名吕毅(包含链接:),不得用于商业目的基于本文修改后的作品务必以相同的许可发布。如有任何疑问请。

}
<h3>
【单选题】构成人体蛋白质的氨基酸有( )种
</h3>
<h3>
【单选题】胃液的pH值大概为( )。
</h3>
<h3>
【单选题】蛋白质消化主要场所()
</h3>
<h3>
【多选题】市场营销哲学是企业在开展市场营销活动的过程中,在處理( )三者利益方面所持的态度、思想和观念
</h3>
<h3>
【单选题】除8种必需氨基酸外,还有( )是婴幼儿不可缺少的氨基酸。
</h3>
<h3>
【简答题】1.人がいいことをしたら、その人の家族はどうなりますか
</h3>
<h3>
【简答题】胡克为什么痛恨彼得,他用什么方法抓住了孩子?在地下之家里,他是怎样对付彼得的?
</h3>
<h3>
【論述题】试析美国在 19 世纪末 20 世纪初经济迅速发展的原因 (30.0分)
</h3>
<h3>
【单选题】肉、蛋等食品腐败变质后有恶臭味,是食物中( )成份分解而致。
</h3>
<h3>
【单选题】人体的必需微量元素是
</h3>
<h3>
【填空题】SQL是( )的缩写
</h3>
<h3>
【单选题】下列不属于小肠消化液的是( )。
</h3>
<h3>
【单选题】《电气设备安装工程》是第几册安装萣额?
</h3>
<h3>
【简答题】试析英法帝国主义国家的特点 (40.0分)
</h3>
<h3>
【单选题】有关蛋白质的叙述不正确的是
</h3>
<h3>
【多选题】综合工日消耗量包括:
</h3>
<h3>
【判断题】“收箌其他与筹资活动有关的现金”项目中金额较大的应单独列示( )
</h3>
<h3>
【单选题】一般来说,膳食营养供给量比营养生理需要量
</h3>
<h3>
【单选题】定额中,通常( )费为未计价材料费?
</h3>
<h3>
【单选题】以下关于视图的描述中,不正确的是( )。
</h3>
<h3>
【填空题】SQL的功能包括( )、( )、( )和( )四个部分
</h3>
<h3>
【单选题】高血脂病人限食含胆固醇丰富的食物()
</h3>
<h3>
【单选题】大多数蛋白质的含氮量相当接近,平均约为( )
</h3>
<h3>
【单选题】4Rs理论由 ( )于 2001年提出。
</h3>
<h3>
【单选题】人体可从饮食食物获嘚,也可经日光照射后获得的Vit是
</h3>
<h3>
【单选题】儿童生长发育迟缓、食欲减退或有异食癖,最可能缺乏( )
</h3>
<h3>
【单选题】成人体内蛋白质含量约为()
</h3>
<h3>
【单選题】市场营销起源于( )
</h3>
<h3>
【单选题】我国人民膳食中热能主要来源于
</h3>
<h3>
【判断题】以发行股票、债券等方式筹集资金由企业直接支付的审计、咨询等费用,在“支付的其他与筹资活动有关的现金”项目反映。( )
</h3>
<h3>
【简答题】生产观念和产品观念的区别有哪些?
</h3>
<h3>
【填空题】SQL支持数据库的三級模式结构,其中( )对应于视图和部分基本表,( )对应于基本表,( )对应于存储文件
</h3>
<h3>
【多选题】定额基价包括?
</h3>
<h3>
【判断题】企业支付的借款利息在“分配股利、利润或偿付利息支付的现金”项目反映。( )
</h3>
<h3>
【论述题】试析英国在 19 世纪末 20 世纪初经济发展缓慢的原因 (30.0分)
</h3>
<h3>
【单选题】____是最重要的必需脂肪酸
</h3>
<h3>
【单选题】( )严重缺乏会引起伴有体力虚弱的脚气病
</h3>
<h3>
【多选题】4P包括( )
</h3>
<h3>
【单选题】____是构成血红蛋白的重要成分
</h3>
<h3>
【简答题】市场按照购買目的划分,可以分为哪些市场?
</h3>
<h3>
【单选题】决定人体热能需要量的因素主要有
</h3>
<h3>
【单选题】时间定额的单位是
</h3>
<h3>
【单选题】为了指导居民合理营養、平衡膳食,许多国家制订有膳食营养素推荐供给量,即:( )。
</h3>
<h3>
【简答题】温迪在地下之家里做的哪件事最让你感兴趣?说说理由
</h3>
<h3>
【单选题】食品营养价值取决于
</h3>
<h3>
【单选题】每工日按多长时间计算?
</h3>
<h3>
【单选题】关于维生素概念的解释哪项是错误的
</h3>
<h3>
【判断题】菲利普·科特勒被称为“现代营销学之父” 。
</h3>}

我要回帖

更多关于 处理库存皮料 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信