如果测得总磷为0.053mgL,若要以p计应该如何换算求公式换算

如果测得总磷为0.053mgL,若要以p计应该如何换算求公式换算,第1张

总磷是水样经消解后将各种形态的磷转变成正磷酸盐后测定的结果

如果你的标准曲线是OD对正磷酸盐(PO43+,这个没法上下标,但是应该能看懂)的浓度做出来的,那么这里的0053mg/L应该是指PO43+ 的浓度,根据分子量计算得到PO43+中P的质量占多少,换算一下即可

有时候做标准曲线直接是按照P元素的量计,这种情况下0053mg/L就是P的浓度

作者 石默研

关于CAP的讨论已经很多,包括作者的另一篇文章“对CAP的初步解释”,基本已经即定思维的理解就是:分布式系统必须遵循CAP,一个分布式系统的设计只能同时满足其中两个,不可能同时满足;传统关系数据库选择A与C,代表了互联网新兴技术的NoSQL数据库则选择A与P(或者C与P,虽然这种情况其实需要详细讨论)。

但是,近年来,新兴的NewSQL数据库(TiDB或者OceanBase),则是一种在分布式环境下,保证的ACID强事务特征的强一致性数据库,并且很显然,它同时也满足了高可用性与优秀的分区可容忍性(很好的可扩展特性便是其一个层面的证明),似乎看起来,C、A、P都同时保证了,这不是违反了已经经过严格证明的CAP理论吗?

这个问题初看起来,似乎是比较神奇,但仔细分析,其实答案是很明显的。

首先,需要读者区分“分布式”与CAP中所提到的分区可容忍性Paritition Tolerance并不是一回事。分区可容忍性P是指以下两种分布式的情况:

同一份数据的多个副本的可分布性

有相互关联的数据的可分布性( *** 作中表现为保证ACID的强分布式事务)

即使是分库分表,如果不存在以上两种情况,只是独立数据在同一个节点上的情况,虽然也是分布式,但跟CAP中的P没有半毛钱关系。

那么,还是回到上面的问题,NewSQL数据库,确实也是在保证了同一份数据多副本的强读写一致性、以及强分布式事务特性这样的C的情况下,同时保证了A与P呀!事实确实如此,但这还是要仔细分析:

无论是TiDB,还是OceanBase,其在保证数据多副本的强一致性时,都采用了Paxos协议或者Raft,它们简单来讲就是多数选举的原则,即写不需要全部副本都完成,就能保证读的强一致性,反过来也是一样。因此,其在分布式情况下,保证数据读写强一致性的效率还是很高的,就是说,在同一个数据中心的网络环境下,虽然这种分布可容忍性的满足理论上讲也会比单节点多一点点效率损失,但实际上是可以忽略不计的。但需要指出的是,在跨数据中心、跨城市的分布式情况下,如果要保证数据多副本的强一致性,即保证分区可容忍性,对效率(实际上是可用性A)的影响那还是不可忽略的。因此,在这种情况下,CAP理论依然成立。

再来看相互关联数据的可分布性,这就涉及到了分布式事务。现有的NewSQL数据库,即使在同一数据中心,为了保证强的分布式事务,对效率的折衷都是不可忽略的,所谓的乐观事务,只是因为客观问题本身冲突就少,并不改变冲突很多时效率明显受影响的现实。因此,NewSQL数据库虽然提供强分布式事务的能力,但在现实应用中,都是提倡尽量避免大量的分布式事务出现。如果你所遇到的应用场景是确实需要大量的分布式事务执行,又不做应用优化全交给数据库执行,那么,现有的NewSQL分布式数据库,依然会遇到明显的性能问题,其实就是可用性A降低了。同学仔细去研究应用中的实际情况就会发现,很多互联网应用,当其所需要的QPS很高很高,而对读写一致性与强分布式事务的要求又不那很高时候,其实,NewSQL数据库还是不能满足他们的需求的,他们仍然需要根据自己的情况改造或者选用NoSQL数据库,这也是CAP理论并没有被NewSQL打破的现实证明。

因此,总结来讲,NewSQL数据库,也是遵循CAP理论的,只不过,在同中心数据多副本情况下,保证P的同时对A的影响微乎其微;而在分布式事务的情况下,又采用了与应用特性相关的策略(其实乐观、悲观事务本质上就有根本应用特性区分的意思)来保证性能而已。当然,随着网络与计算机性能的提高,CAP三个特征中,保证其中两个,折衷另外一个,所带来的影响也会逐渐变小,但其理论依然是正确的。

查看用户的回滚段的信息

select s username rn name from v$session s v$transaction t v$rollstat r v$rollname rnwhere s saddr = t ses_addr and t xidusn = r usn and r usn = rn usn

生成执行计划

explain plan set statement_id= a for & ;

查看执行计划

select lpad( (level ))||operation operation options OBJECT_NAME position from plan_tablestart with id= and statement_id= a connect by prior id=parent_id and statement_id= a

查看内存中存的使用

select decode(greatest(class ) decode(class Data Sort Header to_char(class)) Rollback ) Class sum(decode(bitand(flag ) )) Not Dirty sum(decode(bitand(flag ) )) Dirty sum(dirty_queue) On Dirty count() Total from x$bh group by decode(greatest(class ) decode(class Data Sort Header to_char(class)) Rollback );

查看表空间状态

select tablespace_name extent_management segment_space_management from dba_tablespaces;select table_name freelists freelist_groups from user_tables;

查看系统请求情况

SELECT DECODE (name summed dirty write queue length value)/DECODE (name write requests value) Write Request Length FROM v$sysstat WHERE name IN ( summed dirty queue length write requests ) and value> ;

计算data buffer命中率

select a value + b value logical_reads c value phys_reads round( ((a value+b value) c value) / (a value+b value)) BUFFER HIT RATIO from v$sysstat a v$sysstat b v$sysstat cwhere a statistic# = and b statistic# = and c statistic# = ;SELECT name ( (physical_reads/(db_block_gets+consistent_gets))) H_RATIO FROM v$buffer_pool_statistics;

查看内存使用情况

select least(max(b value)/( ) sum(a bytes)/( )) shared_pool_used max(b value)/( ) shared_pool_size greatest(max(b value)/( ) sum(a bytes)/( )) (sum(a bytes)/( )) shared_pool_avail ((sum(a bytes)/( ))/(max(b value)/( ))) avail_pool_pctfrom v$sgastat a v$parameter b where (a pool= shared pool and a name not in ( free memory )) and b name= shared_pool_size ;

查看用户使用内存情况

select username sum(sharable_mem) sum(persistent_mem) sum(runtime_mem)from sys v_$sqlarea a dba_users bwhere a parsing_user_id = b user_id group by username;

查看对象的缓存情况

select OWNER NAMESPACE TYPE NAME SHARABLE_MEM LOADS EXECUTIONS LOCKS PINS KEPTfrom v$db_object_cache where type not in ( NOT LOADED NON EXISTENT VIEW TABLE SEQUENCE )and executions> and loads> and kept= NO order by owner namespace type executions desc;select type count() from v$db_object_cache group by type;

查看库缓存命中率

select namespace gets gethitratio gethitratio pins pinhitratio pinhitratio RELOADS INVALIDATIONS from v$librarycache

查看某些用户的hash

select a username count(b hash_value) total_hash count(b hash_value) count(unique(b hash_value)) same_hash (count(unique(b hash_value))/count(b hash_value)) u_hash_ratiofrom dba_users a v$sqlarea b where a user_id=b parsing_user_id group by a username;

查看字典命中率

select (sum(getmisses)/sum(gets)) ratio from v$rowcache;

查看undo段的使用情况

SELECT d segment_name extents optsize shrinks aveshrink aveactive d statusFROM v$rollname n v$rollstat s dba_rollback_segs dWHERE d segment_id=n usn(+) and d segment_id=s usn(+);

无效的对象

select owner object_type object_name from dba_objects where status= INVALID ;select constraint_name table_name from dba_constraints where status= INVALID ;

求出某个进程 并对它进行跟踪

select s sid s serial# from v$session s v$process p where s paddr=p addr and p spid=& ;exec dbms_system SET_SQL_TRACE_IN_SESSION(& & true);exec dbms_system SET_SQL_TRACE_IN_SESSION(& & false);

求出锁定的对象

select do object_name session_id process locked_modefrom v$locked_object lo dba_objects do where lo object_id=do object_id;

求当前session的跟踪文件

SELECT p value || / || p value || _ora_ || p spid || ora filenameFROM v$process p v$session s v$parameter p v$parameter p WHERE p name = user_dump_dest AND p name = instance_name AND p addr = s paddr AND s audsid = USERENV( SESSIONID ) AND p background is null AND instr(p program CJQ ) = ;

求对象所在的文件及块号

select segment_name header_file header_blockfrom dba_segments where segment_name like & ;

求对象发生事务时回退段及块号

select a segment_name a header_file a header_blockfrom dba_segments a dba_rollback_segs bwhere a segment_name=b segment_name and b segment_id= &

i的在线重定义表

/如果在线重定义的表没有主键需要创建主键/exec dbms_redefinition can_redef_table( cybercafe announcement );create table anno as select from announcementexec dbms_redefinition start_redef_table( cybercafe announcement anno );exec dbms_redefinition sync_interim_table( cybercafe announcement anno );exec dbms_redefinition finish_redef_table( cybercafe announcement anno );drop table anno exec dbms_redefinition abort_redef_table( cybercafe announcement anno );

常用的logmnr脚本(cybercafe)

exec sys dbms_logmnr_d build(dictionary_filename => esal dictionary_location => /home/oracle/logmnr );exec sys dbms_logmnr add_logfile(logfilename=> /home/oracle/oradata/esal/archive/ _ dbf ptions=>sys dbms_logmnr new);exec sys dbms_logmnr add_logfile(logfilename=> /home/oracle/oradata/esal/archive/ _ dbf ptions=>sys dbms_logmnr addfile);exec sys dbms_logmnr add_logfile(logfilename=> /home/oracle/oradata/esal/archive/ _ dbf ptions=>sys dbms_logmnr addfile);exec sys dbms_logmnr add_logfile(logfilename=> /home/oracle/oradata/esal/archive/ _ dbf ptions=>sys dbms_logmnr addfile);exec sys dbms_logmnr start_logmnr(dictfilename=> /home/oracle/logmnr/esal ora );create table logmnr as select from v$logmnr_contents;

与权限相关的字典

ALL_COL_PRIVS表示列上的授权 用户和PUBLIC是被授予者ALL_COL_PRIVS_MADE表示列上的授权 用户是属主和被授予者ALL_COL_RECD表示列上的授权 用户和PUBLIC是被授予者ALL_TAB_PRIVS表示对象上的授权 用户是PUBLIC或被授予者或用户是属主ALL_TAB_PRIVS_MADE表示对象上的权限 用户是属主或授予者ALL_TAB_PRIVS_RECD表示对象上的权限 用户是PUBLIC或被授予者DBA_COL_PRIVS数据库列上的所有授权DBA_ROLE_PRIVS显示已授予用户或其他角色的角色DBA_SYS_PRIVS已授予用户或角色的系统权限DBA_TAB_PRIVS数据库对象上的所有权限ROLE_ROLE_PRIVS显示已授予用户的角色ROLE_SYS_PRIVS显示通过角色授予用户的系统权限ROLE_TAB_PRIVS显示通过角色授予用户的对象权限SESSION_PRIVS显示用户现在可利用的所有系统权限USER_COL_PRIVS显示列上的权限 用户是属主 授予者或被授予者USER_COL_PRIVS_MADE显示列上已授予的权限 用户是属主或授予者USER_COL_PRIVS_RECD显示列上已授予的权限 用户是属主或被授予者USER_ROLE_PRIVS显示已授予给用户的所有角色USER_SYS_PRIVS显示已授予给用户的所有系统权限USER_TAB_PRIVS显示已授予给用户的所有对象权限USER_TAB_PRIVS_MADE显示已授予给其他用户的对象权限 用户是属主USER_TAB_PRIVS_RECD显示已授予给其他用户的对象权限 用户是被授予者

如何用dbms_stats分析表及模式?

exec dbms_stats gather_schema_stats(ownname=> &USER_NAME estimate_percent=>dbms_stats auto_sample_size method_opt => for all columns size auto degree=> DBMS_STATS DEFAULT_DEGREE);exec dbms_stats gather_schema_stats(ownname=> &USER_NAME estimate_percent=>dbms_stats auto_sample_size cascade=>true);/FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]FOR COLUMNS [size clause] column|attribute [size_clause] [ column|attribute [size_clause] ] where size_clause is defined as size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}integer Number of histogram buckets Must be in the range [ ] REPEAT Collects histograms only on the columns that already have histograms AUTO Oracle determines the columns to collect histograms based on data distribution and the workload of the columns SKEWONLY Oracle determines the columns to collect histograms based on the data distribution of the columns/

lishixinzhi/Article/program/SQL/201311/16148

一般是代表总磷(以P计)

总磷是水样经消解后将各种形态的磷转变成正磷酸盐后测定的结果,以每升水样含磷毫克数计量。根据GB/T10647 饲料工业术语 总磷(total phosphorus;TP)饲料中以无机态和有机态存在的磷的总和。在酸性介质中, 正磷酸盐与 钼酸铵反应,在锑盐存在下生成磷钼杂多酸后,立即被抗坏血酸还原,生成蓝色的络合物。 高氯酸和有机物的混合物经加热易发生危险,需将试样先用 硝酸消解,然后再加入硝-酸高氯酸进行消解。铬大于50mg/L干扰测定,用亚硫酸钠去除。

水质检测指标

序号

名称

1

色度

色度仪

2

浑浊度

实验室浊度仪

3

臭和味

/

4

肉眼可见物

/

5

pH

实验室pH计,HC-800全自动离子分析仪

5

HC-800全自动离子分析仪

6

总硬度(以CaCO3计)

滴定管、HC-800全自动离子分析仪或专用玻璃仪器

7

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

电感耦合等离子体质谱仪/7500a

8

电感耦合等离子体质谱仪

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

9

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

10

电感耦合等离子体质谱仪/7500a

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

11

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

12

挥发酚类(以苯酚计)

紫外可见分光光度计TU19

13

阴离子合成洗涤剂

紫外可见分光光度计

14

硫酸盐

离子色谱仪

15

氯化物

离子色谱仪,HC-800全自动离子分析仪

HC-800全自动离子分析仪

16

溶解性总固体

电子分析天平

17

耗氧量(以O2计)

电热恒温水浴锅

18

原子荧光光度计(相关附件)

AFS-230E

19

原子荧光光度计(相关附件)

AFS-230E

20

铬(六价)

可见分光光度计

/721

21

氰化物

紫外可见分光光度计TU19

22

原子吸收

23

氟化物

离子色谱仪

ICS-900,HC-800全自动离子分析仪

离子活度计

24

原子荧光

电感耦合等离子体质谱仪

25

原子荧光

26

硝酸盐(以N计)

离子色谱仪

ICS-900,HC-800全自动离子分析仪

紫外可见分光光度计

27

四氯化碳

气相色谱仪

789

28

***

气相色谱仪

789

29

菌落总数

电热恒温培养箱

30

总大肠菌群

微生物检测系统

31

耐热大肠菌群

恒温培养箱

32

游离余氯

袖珍式余氯总氯分析仪

33

总α放射性

电子分析天平

M214AI

低本底α、β测量仪

FYFS-400X

34

总β放射性

低本底α、β测量仪

FYFS-400X

电子分析天平

M214AI

35

硫化物

可见分光光度计

/721

36

37

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

38

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

39

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

40

可见分光光度计

/721

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

41

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

42

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

43

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

44

原子吸收分光光度计

(带石墨炉自动进样器及相关附件)

45

二氯甲烷

气相色谱仪

46

一氯二溴甲烷

气相色谱仪

47

二氯一溴甲烷

气相色谱仪

48

1,2-二氯乙烷

气相色谱仪

49

1,1,1-三氯乙烷

气相色谱仪

50

1,1-二氯乙烯

气相色谱仪

51

1,2-二氯乙烯

气相色谱仪

52

三氯乙烯

气相色谱仪

53

四氯乙烯

气相色谱仪

54

气相色谱仪

55

甲苯

气相色谱仪

56

乙苯

气相色谱仪

57

苯并(α)芘

高效液相色谱仪

58

氯苯

气相色谱仪

59

1,2-二氯苯

气相色谱仪

60

1,4-二氯苯

气相色谱仪

61

1,2,3-三氯苯

气相色谱仪

62

1,2,4-三氯苯

气相色谱仪

63

1,3,5-三氯苯

气相色谱仪

64

溴氰菊脂

气相色谱仪

65

微囊藻毒素-LR

高效液相色谱仪

66

林丹

气相色谱仪

67

滴滴涕

气相色谱仪

68

六氯苯

气相色谱仪

69

乐果

气相色谱仪

70

六六六

气相色谱仪

71

对硫磷

气相色谱仪

72

甲基对硫磷

气相色谱仪

73

五氯酚

高效液相色谱仪

74

2,4,6-三氯酚

高效液相色谱仪

75

三溴甲烷

气相色谱仪

76

电感耦合等离子体质谱仪,HC-800全自动离子分析仪

77

电感耦合等离子体质谱仪,HC-800全自动离子分析仪

78

电感耦合等离子体质谱仪,HC-800全自动离子分析仪

79

电感耦合等离子体质谱仪

紫外可见分光光度计

80

溶解氧

溶解氧仪M190

滴定管、通用

或专用玻璃仪器

81

总碱度

滴定管、通用或专用玻璃仪器

82

总有机碳

总有机碳测定仪

83

石油类

红外测油仪

84

敌敌畏

气相色谱仪

85

敌百虫

气相色谱仪

86

2,4-二氯酚

高效液相色谱仪

87

1,1,2-三氯乙烷

气相色谱仪

88

电感耦合等离子体质谱仪

89

电感耦合等离子体质谱仪

90

电感耦合等离子体质谱仪

91

溴化物

可见分光光度计

/721

离子色谱仪

92

碘化物

离子色谱仪

气相色谱仪

93

莠去津

气相色谱仪

94

电感耦合等离子体质谱仪

可见分光光度计

/721

95

电感耦合等离子体质谱仪

96

总铬

电感耦合等离子体质谱仪

97

甲胺磷

气相色谱仪

98

荧蒽

高效液相色谱仪

99

苯并(b) 荧蒽

高效液相色谱仪

100

苯并(k) 荧蒽

高效液相色谱仪

101

苯并(g,h,i) 苝

高效液相色谱仪

102

茚并(1,2,3-c,d)芘

高效液相色谱仪

103

粪链球菌

电热恒温培养箱

104

电导率

电导率仪

105

氨氮

紫外可见分光光度计

便携式分光光度计

106

亚硝酸盐氮

紫外可见分光光度计

便携式分光光度计

107

悬浮物

电子分析天平

108

五日生化需氧量(BOD5)

BOD仪与生化培养箱

109

化学需氧量(COD)

COD

110

总磷(以P计)

111

总氮

水质检测标准

1、生活用水相关标准

GB5749-2006生活饮用水卫生标准。

GB19298-2003瓶(桶)装饮用水卫生标准。

2、冷却水及锅炉用水标准

GB/T15453-2008工业循环冷却水和锅炉用水中氯离子的测定。

GB/T6904-2008工业循环冷却水及锅炉用水中pH的测定。

GB/T6911-2007工业循环冷却水和锅炉用水中硫酸盐的测定。

GB/T12152-2007锅炉用水和冷却水中油含量的测定。

GB/T13689-2007工业循环冷却水和锅炉用水中铜的测定。

GB/T12149-2007工业循环冷却水和锅炉用水中硅的测定

GB/T14424-2008工业循环冷却水中余氯的测定。

GB/T15456-2008工业循环冷却水中化学需氧量(COD)的测定高锰酸钾法。

GB/T15453-2008工业循环冷却水和锅炉用水中氯离子的测定。

3、工业废水相关标准

GB3544-2008造纸工业水污染物排放标准。

GB4914-2008海洋石油开发工业含油污水排放标准。

GB4287-92纺织染整工业水污染物排放标准。

GB13457-92肉类加工工业水污染物排放标准。

GB13458-2001合成氨工业水污染物排放标准。

GB13456-92钢铁工业水污染物排放标准。

GB14374-93航天推进剂水污染物排放标准。

GB144701~144703-2002兵器工业水污染物排放标准。

GB15580-95磷肥工业水污染物排放标准。

GB15581-95烧碱、聚氯乙烯工业水污染物排放标准。

GB20425-2006皂素工业水污染物排放标准。

GB20426-2006煤炭工业污染物排放标准。

数据库实验总结一

试验内容

1、 数据表的建立

基本表《简单的》带有主键

带有外码约束的(外码来自其他表或者本表)

2、 数据表的修改

添加删除列

修改列属性类型

添加删除约束(约束名)

元组的添加,修改,删除

删除数据表

试验过程

1、create table student

(

sno char(9) primary key , /sno是主码 列级完整性约束条件/

sname char(20) unique, /sname取唯一值/

ssex char(2),

sage smallint, /类型为smallint/

sdept char(20) /所在系/

);

create table course

(

cno char(4) primary key, /列级完整性约束条件,cno是主码/

cname char(40),

cpno char(4), /cpno的含义是先行课/

ccredit smallint,

foreign key (cpno) references course(cno)

/表级完整性约束条件,cpno是外码,被参照表是course,被参照列是cno/

);

create table sc

(

sno char(9),

cno char(4),

grade smallint,

primary key (sno,cno),

/主码有两个属性构成,必须作为表级完整性进行定义/

foreign key (sno) references student(sno),

/表级完整性约束条件,sno是外码,被参照表是student/

foreign key (cno) references course(cno),

/表级完整性约束条件,cno是外码,被参照表示course/

);

例1、create table s

(

cno varchar(3), /变长的字符串,输入2个字符就是两个字符不会补空格/

sname varchar(20),

status int,

city varchar(20),

constraint pk_sno primary key(sno), /约束条件的名字为pk_sno/

);

create table p

(

pno varchar(3),

pname varchar(20),

color varchar(3),

weight int,

constraint pk_pno primary key (pno), /约束条件的名字是pk_pno/

);

create table j

(

jno varchar(3),

jname varchar(20),

city varchar(20),

constraint pk_jno primary key(jno) /约束条件的名字为pk_jno/

);

例2、create table spj

(

sno varchar(3), /第一个表中的主码/

pno varchar(3),

jno varchar(3),

qty int, /数量/

constraint pk_spj primary key(sno,pno,jno), /主码由3个属性组成/

foreign key(sno) references s(sno),

/表级完整性约束条件,sno是外码,被参照表是s/

foreign key(pno) references p(pno),

/表级完整性约束条件,pno是外码,被参照表是p/

foreign key(jno) references j(jno),

/表级完整性约束条件,jno是外码,被参照表是j/

);

2、数据表的更改

在s表中添加一个concat 列

alter table s add concat varchar(20)

在s表中删除concat 列

alter table s drop column concat

更改s表 concat列的属性 把长度由20改为30

alter table s alter column concat varchar(30)

**** 名字为concat 修改属性为唯一的 属性名为con_concat

alter table s add constraint con_concat unique(concat)

删除约束关系con_concat

alter table s drop constraint con_concat

/插入一个元组/

insert into s valus(‘s1’,’精益’,20,’天津’) /20不能写成’20’/

试验中的问题的排除与总结:

1、在创建spj时

有三个实体所以从3个实体中取主码,还有一个数量属性也要写上

主码由那3个主码确定

2、更改一个数据库中数据表时一定要先使该数据库处于正在使用状态

3、constraint

是可选关键字,表示 primary key、not null、unique、foreign key 或 check 约束定义的开始。约束是特殊属性,用于强制数据完整性并可以为表及其列创建索引

4、--go可以不加但是要注意顺序 注:go --注释 提示错误

5、注意添加一个空元素用 null

附 sql备份

--创建一个数据库 student

create database student

go

--在数据库student中创建表student course sc 注意顺序

use student

----------------------------------------------------------------

create table student

(

sno char(9) primary key, /sno是主码 列级完整性约束条件/

sname char(10) unique, /sname取唯一值/

ssex char(2),

sage smallint, /类型为smallint/

sdept char(20) /所在系/

); /;要加/

-----------

数据库实验总结二

我在sql server 索引基础知识系列中,第一篇就讲了记录数据的基本格式。那里主要讲解的是,数据库的最小读存单元:数据页。一个数据页是8k大小。

对于数据库来说,它不会每次有一个数据页变化后,就存到硬盘。而是变化达到一定数量级后才会作这个 *** 作。 这时候,数据库并不是以数据页来作为 *** 作单元,而是以64k的数据(8个数据页,一个区)作为 *** 作单元。

区是管理空间的基本单位。一个区是八个物理上连续的页(即 64 kb)。这意味着 sql server 数据库中每 mb 有 16 个区。

为了使空间分配更有效,sql server 不会将所有区分配给包含少量数据的表。sql server 有两种类型的区:

统一区,由单个对象所有。区中的所有 8 页只能由所属对象使用。

混合区,最多可由八个对象共享。区中八页的每页可由不同的对象所有。

通常从混合区向新表或索引分配页。当表或索引增长到 8 页时,将变成使用统一区进行后续分配。如果对现有表创建索引,并且该表包含的行足以在索引中生成 8 页,则对该索引的所有分配都使用统一区进行。

为何会这样呢

其实很简单:

读或写 8kb 的时间与读或写 64 kb的时间几乎相同。

在 8 kb 到 64 kb 范围之内,单个磁盘 i/o 传输 *** 作所花的时间主要是磁盘取数臂和读/写磁头运动的时间。

因此,从数学上来讲,当需要传输 64 kb 以上的 sql 数据时,

尽可能地执行 64 kb 磁盘传输是有益的,即分成数个64k的 *** 作。

因为 64 kb 传输基本上与 8 kb 传输一样快,而每次传输的 sql server 数据是 8 kb 传输的 8 倍。

我们通过一个实例来看 有and *** 作符时候的最常见的一种情况。我们有下面一个表,

create table [dbo][member]( [member_no] [dbo][numeric_id] identity(1,1) not null, [lastname] [dbo][shortstring] not null, [firstname] [dbo][shortstring] not null, [middleinitial] [dbo][letter] null, [street] [dbo][shortstring] not null, [city] [dbo][shortstring] not null, [state_prov] [dbo][statecode] not null, [country] [dbo][countrycode] not null, [mail_code] [dbo][mailcode] not null, [phone_no] [dbo][phonenumber] null, [photograph] [image] null, [issue_dt] [datetime] not null default (getdate()), [expr_dt] [datetime] not null default (dateadd(year,1,getdate())), [region_no] [dbo][numeric_id] not null, [corp_no] [dbo][numeric_id] null, [prev_balance] [money] null default (0), [curr_balance] [money] null default (0), [member_code] [dbo][status_code] not null default (' '))

这个表具备下面的四个索引:

索引名 细节 索引的列

member_corporation_link nonclustered located on primary corp_no

member_ident clustered, unique, primary key located on primary member_no

member_region_link nonclustered located on primary region_no

memberfirstname nonclustered located on primary firstname

当我们执行下面的sql查询时候,

select mmember_no, mfirstname, mregion_nofrom dbomember as mwhere mfirstname like 'k%' and mregion_no > 6 and mmember_no < 5000go

sql server 会根据索引方式,优化成下面方式来执行。

select amember_no,afirstname,bregion_nofrom(select mmember_no, mfirstname from dbomember as m where mfirstname like 'k%' and mmember_no < 5000) a , -- 这个查询可以直接使用 memberfirstname 非聚集索引,而且这个非聚集索引覆盖了所有查询列-- 实际执行时,只需要 逻辑读取 3 次

(select mmember_no, mregion_no from dbomember as mwhere mregion_no > 6) b

-- 这个查询可以直接使用 member_region_link 非聚集索引,而且这个非聚集索引覆盖了所有查询列-- 实际执行时,只需要 逻辑读取 10 次

where amember_no = bmember_no

不信,你可以看这两个sql 的执行计划,以及逻辑读信息,都是一样的。

其实上面的sql,如果优化成下面的方式,实际的逻辑读消耗也是一样的。为何sql server 不会优化成下面的方式。是因为 and *** 作符优化的另外一个原则。

1/26 的数据和 1/6 的数据找交集的速度要比 1/52 的数据和 1/3 的数据找交集速度要慢。

select amember_no,afirstname,bregion_nofrom(select mmember_no, mfirstname from dbomember as mwhere mfirstname like 'k%' -- 1/26 数据) a,

(select mmember_no, mregion_no from dbomember as mwhere mregion_no > 6 and mmember_no < 5000-- 1/3 1/ 2 数据) bwhere amember_no = bmember_no

当然,我们要学习sql 如何优化的话,就会用到查询语句中的一个功能,指定查询使用哪个索引来进行。

比如下面的查询语句

select mmember_no, mfirstname, mregion_nofrom dbomember as m with (index (0))where mfirstname like 'k%' and mregion_no > 6 and mmember_no < 5000go

select mmember_no, mfirstname, mregion_nofrom dbomember as m with (index (1))where mfirstname like 'k%' and mregion_no > 6 and mmember_no < 5000goselect mmember_no, mfirstname, mregion_nofrom dbomember as m with (index (membercovering3))where mfirstname like 'k%' and mregion_no > 6 and mmember_no < 5000goselect mmember_no, mfirstname, mregion_nofrom dbomember as m with (index (memberfirstname, member_region_link))where mfirstname like 'k%' and mregion_no > 6 and mmember_no < 5000go

这里 index 计算符可以是 0 ,1, 指定的一个或者多个索引名字。对于 0 ,1 的意义如下:

如果存在聚集索引,则 index(0) 强制执行聚集索引扫描,index(1) 强制执行聚集索引扫描或查找(使用性能最高的一种)。

如果不存在聚集索引,则 index(0) 强制执行表扫描,index(1) 被解释为错误。

总结知识点:

简单来说,我们可以这么理解:sql server 对于每一条查询语句。会根据实际索引情况(sysindexes 系统表中存储这些信息),分析每种组合可能的成本。然后选择它认为成本最小的一种。作为它实际执行的计划。

成本代价计算的一个主要组成部分是逻辑i/o的数量,特别是对于单表的查询。

and *** 作要满足所有条件,这样,经常会要求对几个数据集作交集。数据集越小,数据集的交集计算越节省成本。

的项目中,竟然出现了滥用聚集索引的问题。看来没有培训最最基础的索引的意义,代价,使用场景,是一个非常大的失误。这篇博客就是从这个角度来罗列索引的基础知识。

使用索引的意义

索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度。

使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据。

使用索引的代价

索引需要占用数据表以外的物理存储空间。

创建索引和维护索引要花费一定的时间。

当对表进行更新 *** 作时,索引需要被重建,这样降低了数据的维护速度。

创建索引的列

主键

外键或在表联接 *** 作中经常用到的列

在经常查询的字段上最好建立索引

不创建索引的列

很少在查询中被引用

包含较少的惟一值

定义为 text、ntext 或者 image 数据类型的列

heaps是staging data的很好选择,当它没有任何index时

excellent for high performance data loading (parallel bulk load and parallel index creation after load)

excellent as a partition to a partitioned view or a partitioned table

聚集索引提高性能的方法,在前面几篇博客中分别提到过,下面只是一个简单的大纲,细节请参看前面几篇博客。

何时创建聚集索引

clustered index会提高大多数table的性能,尤其是当它满足以下条件时:

独特, 狭窄, 静止: 最重要的条件

持续增长的,最好是只向上增加。例如:

identity

date, identity

guid (only when using newsequentialid() function)

聚集索引唯一性(独特型的问题)

由于聚集索引的b+树结构的叶子节点必须指向具体数据。如果你要建立聚集索引的列不唯一,并且你指定的创建的聚集索引是非唯一的聚集索引,则会有以下情况:

如果未使用 unique 属性创建聚集索引,数据库引擎 将向表自动添加一个四字节 uniqueifier 列。必要时,数据库引擎 将向行自动添加一个 uniqueifier 值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。

以上就是关于如果测得总磷为0.053mg/L,若要以p计应该如何换算求公式换算全部的内容,包括:如果测得总磷为0.053mg/L,若要以p计应该如何换算求公式换算、关于NewSQL数据库对于CAP的再解释、数据库进阶:数据库管理员日常工作中必备的sql列表[3]等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9666467.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存