数据库可以按照内容类型分类:书目、全文、数字和图像。在计算中,数据库有时根据其组织方法进行分类。有许多不同类型的数据库,从最流行的方法关系数据库到分布式数据库、云数据库或NoSQL数据库。
常用数据库:
1、关系型数据库
关系型数据库是由IBM的EF Codd于1970年发明的,它是一个表格数据库,其中定义了数据,因此可以以多种不同的方式对其进行重组和访问。
关系数据库由一组表组成,其中的数据属于预定义的类别。每个表在一个列中至少有一个数据类别,并且每一行对于列中定义的类别都有一个特定的数据实例。
结构化查询语言(SQL)是关系数据库的标准用户和应用程序接口。关系数据库易于扩展,并且可以在原始数据库创建之后添加新的数据类别,而不需要修改所有现有应用程序。
2、分布式数据库
分布式数据库是一种数据库,其中部分数据库存储在多个物理位置,处理在网络中的不同点之间分散或复制。
分布式数据库可以是同构的,也可以是异构的。同构分布式数据库系统中的所有物理位置都具有相同的底层硬件,并运行相同的 *** 作系统和数据库应用程序。异构分布式数据库中的硬件、 *** 作系统或数据库应用程序在每个位置上可能是不同的。
3、云数据库
云数据库是针对虚拟化环境(混合云、公共云或私有云)优化或构建的数据库。云数据库提供了一些好处,比如可以按每次使用支付存储容量和带宽的费用,还可以根据需要提供可伸缩性和高可用性。
云数据库还为企业提供了在软件即服务部署中支持业务应用程序的机会。
4、NoSQL数据库
NoSQL数据库对于大型分布式数据集非常有用。
NoSQL数据库对于关系数据库无法解决的大数据性能问题非常有效。当组织必须分析大量非结构化数据或存储在云中多个虚拟服务器上的数据时,它们是最有效的。
5、面向对象的数据库
使用面向对象编程语言创建的项通常存储在关系数据库中,但是面向对象数据库非常适合于这些项。
面向对象的数据库是围绕对象(而不是 *** 作)和数据(而不是逻辑)组织的。例如,关系数据库中的多媒体记录可以是可定义的数据对象,而不是字母数字值。
6、图形数据库
面向图形的数据库是一种NoSQL数据库,它使用图形理论存储、映射和查询关系。图数据库基本上是节点和边的集合,其中每个节点表示一个实体,每个边表示节点之间的连接。
图形数据库在分析互连方面越来越受欢迎。例如,公司可以使用图形数据库从社交媒体中挖掘关于客户的数据。
不对。查询是对数据库中信息的寻找和提取,而非定位。查询是指用户根据自己的需要,在数据库中对所需数据进行查找和提取的过程,可以根据特定条件,通过指定查询语句进行搜索,从而得到符合条件的数据。查询可以用来检索和分析数据,帮助用户快速准确地获取所需要的信息。
优化SQL查询:如何写出高性能SQL语句
1、首先要搞明白什么叫执行计划?
执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生欀如一条SQL语句如果用来从一个10万条
记录的表中查1条记录,那查询优化器会选择“索引查找”方式,如果该表进行了归档,当前只剩下5000条记录了,那查询优化器就会改变方案,采用 “全表
扫描”方式。
可见,执行计划并不是固定的,它是“个性化的”。产生一个正确的“执行计划”有两点很重要:
(1) SQL语句是否清晰地告诉查询优化器它想干什么?
(2) 查询优化器得到的数据库统计信息是否是最新的、正确的?
2、统一SQL语句的写法
对于以下两句SQL语句,程序员认为是相同的,数据库查询优化器认为是不同的。
select from dual
select 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 > @chgtime
@chgtime变量可以传入任何值,这样大量的类似查询可以重用该执行计划了,这可以大大降低数据库解析SQL语句的负担。一次解析,多次重用,是提高数据库效率的原则。
6、绑定变量窥测
事物都存在两面性,绑定变量对大多数OLTP处理是适用的,但是也有例外。
比如在where条件中的字段是“倾斜字段”的时候。
“倾斜字段”指该列中的绝大多数的值都是相同的,一张人口调查表,其中“民族”这列,90%以上都是汉族。那么如果一个SQL语句要查询30岁的汉族人
口有多少,那“民族”这列必然要被放在where条件中。这个时候如果采用绑定变量@nation会存在很大问题。
试想如果@nation传入的第一个值是“汉族”,那整个执行计划必然会选择表扫描。然后,第二个值传入的是“布依族”,按理说“布依族”占的比例可能
只有万分之一,应该采用索引查找。但是,由于重用了第一次解析的“汉族”的那个执行计划,那么第二次也将采用表扫描方式。这个问题就是著名的“绑定变量窥
测”,建议对于“倾斜字段”不要采用绑定变量。
7、 只在必要的情况下才使用begin tran
SQL 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 Join
SQL 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,相当于临时给A,B表的结果集加上索引,因此SQL2005的效率比SQL2000有很大提高,我认为,这是一个重要的原因。
总结一下,在表连接时要注意以下几点:
(1) 连接字段尽量选择聚集索引所在的字段
(2) 仔细考虑where条件,尽量减小A、B表的结果集
(3) 如果很多join的连接字段都缺少索引,而你还在用SQL Server 2000,赶紧升级吧。
世界各国民族的总称。20世纪90年代,全世界共有2000多个民族,其社会、经济和文化分别处于各个不同的发展阶段上。在世界5大洲,民族人口的分布极不均衡,中国汉族是世界上人口最多的民族。世界民族分布不是固定的。其变化的主要原因有:移民、人口增长及民族共同体自身的发展变化。随着一些新独立国家的诞生和发展,出现了不少新的民族成分。此外,如民族矛盾、宗教冲突、种族差别、语言同化、政治上不平等、经济发展不平衡,以及外来侵略和挑拨等,都直接或间接地影响民族成分的变化。
概述 种族类型 人们通常将人类划分为三大人种:蒙古人种(黄种人)、欧罗巴人种(白种人)、尼格罗-澳大利亚人种(黑种人)。蒙古人种的特征是头发硬直墨黑,肤色黄褐,体毛不甚发达,颧骨突出,眼有内眦褶。主要分布在亚洲东部和东南部以及美洲大陆。欧罗巴人种的特征是头发细软呈波状,肤色较浅,体毛和胡须发达,颧骨不太明显,鼻高唇薄。主要分布在欧洲、北非、西亚、北印度,16世纪以来逐渐扩散到美洲和大洋洲。尼格罗-澳大利亚人种的特征是发色深黑呈鬈曲状,颌部微凸,鼻宽唇厚。一般分成尼格罗和澳大利亚两支,前者分布在非洲撒哈拉以南地区,后者分布在澳大利亚和大洋洲及亚洲部分地区。人种的混合类型,多在中古和近代形成。由于民族迁徙,不同种族互相通婚而形成多种混血民族。
民族分类 国际上多以语言谱系分类为基础来划分。全世界的语言分属17个语系。其中:①属一洲独有的语系有10个:美洲一个,即印第安诸语;大洋洲两个,即澳大利亚诸语和巴布亚诸语;非洲3个,即尼罗-撒哈拉语系、尼日尔-科尔多凡语系和科伊桑语系;亚洲4个,即汉藏语系、南亚语系、达罗毗荼语系和古亚语系。②属两洲跨界的语系有7个:亚、美一个,即爱斯基摩-阿留申语系;亚、大一个,即南岛语系;亚、非一个,即闪含语系;亚、欧4个,即印欧语系、高加索语系、乌拉尔语系和阿尔泰语系。这是“地理大发现”以前的情况。随着近代移民的扩散,语言分布也发生较大变化。
印欧语系包括日耳曼、斯拉夫、罗曼、克尔特 、伊朗、印度等10个语族,分布于世界各国,约有150个民族使用,使用人数最多。汉藏语系使用人数居第二位,包括汉、藏缅、壮侗、苗瑶等语族,分布在中国和东南亚等地。闪含语系各族主要分布在西亚和北非。尼日尔-科尔多凡语系各族主要分布在非洲撒哈拉以南。高加索语系各族分布在高加索地区。达罗毗荼语系各族分布在印度南部。乌拉尔语系各族散居于从斯堪的纳维亚半岛到乌拉尔山一带。阿尔泰语系各族分布于从东北亚到小亚细亚的广大地区。南亚语系各族分布在中南半岛。南岛语系各族主要分布在太平洋各岛国。尼罗-撒哈拉语系各族分布在苏丹地区。科伊桑语系各族分布在西南非。古亚语系各族分布在东北亚。爱斯基摩-阿留申语系各族分布在东北亚和北美北极圈内。印第安诸语各族分布在美洲大陆。澳大利亚诸语各族分布在澳大利亚。巴布亚诸语各族分布在伊里安岛。
民族与宗教 在世界许多民族和国家的社会生活中,宗教信仰有其特殊作用,也是区分民族的标志之一。人们通常把宗教信仰分为原始宗教、民族宗教和世界性宗教三大类。原始宗教一般包括图腾崇拜、巫术和万物有灵观念,在中南半岛、热带非洲、美洲和太平洋岛屿的某些民族中仍然不同程度地存在。民族宗教种类很多,如印度教、犹太教、神道教等。世界宗教是指佛教(包括喇嘛教)、基督教(包括天主教、东正教、新教)和伊斯兰教。这三大宗教的信徒估计占世界民族人口的一半。佛教主要在东南亚国家、部分朝鲜人和日本人中较流行。喇嘛教,即藏传佛教,在藏人和蒙古人中较流行。基督教广泛流行于世界各地。伊斯兰教流行也很广,其中,逊尼教派分布于北非、西亚、中亚和印度尼西亚、马来西亚等地;什叶教派主要分布于伊朗,在伊拉克、阿拉伯也门和巴林的阿拉伯人中也有部分什叶派教徒。另外,在欧洲巴尔干半岛的阿尔巴尼亚和南斯拉夫有相当一部分伊斯兰教徒。
各洲概况 亚洲民族 亚洲地区居住有1000多个民族。他们在种族、语言、宗教、经济和文化生活上各有自己的特点,处于社会历史发展的不同阶段。就种族而言,亚洲民族多属蒙古人种,分布在东亚和东南亚。其次属欧罗巴人种的民族,主要分布在西亚和印巴次大陆。尼格罗人种与欧罗巴人种混合类型的民族,分布于印度南部,以及阿拉伯半岛沿海地区。另外,在东南亚居民中还可以见到维达、美拉尼西亚和尼格利陀等种族类型,以及蒙古人种与澳大利亚人种的混合类型。
亚洲民族的语言非常复杂。汉藏语系各族全部在亚洲,占亚洲人口的一半以上。南亚语系包括孟高棉和蒙达等语族。达罗毗荼语系各族,分布于印度中部、南部及斯里兰卡北部。印欧语系在亚洲有两个语族:印度语族和伊朗语族。在西亚,属于闪-含语系的主要是阿拉伯各族。阿尔泰语系各语族有突厥语族、蒙古语族和满-通古斯语族。高加索语系的民族在亚洲较少,主要分布于土耳其、伊朗和前苏联境内。
欧洲民族 欧洲各国的民族成分比较单一。大多数民族都是在各自民族国家的范围内形成的民族分布区域与国界大体一致或接近。只是在民族分布交界的地区,民族成分比较混杂。
印欧语系的日耳曼、罗曼和斯拉夫3大语族占欧洲民族的大部分,其余多属这一语系的克尔特语族、希腊语族、列托-立陶宛语族、阿尔巴尼亚语族和亚美尼亚语族。此外,还有一些民族语言,属于乌拉尔语系、阿尔泰语系和高加索语系各语族。
非洲民族 非洲大陆约占全球陆地面积的1/5,尼格罗人占非洲人口的多数,大多分布在撒哈拉沙漠和埃塞俄比亚高原以南。属于欧罗巴人种和黑白混血人种的居民,主要居住在北非、埃塞俄比亚高原和索马里半岛。马达加斯加岛东部的居民则具有蒙古人种的血统。近年来,欧洲移民人口明显下降。
非洲民族的语言分属4个语系:闪含语系、尼日尔-科尔多凡语系、尼罗-撒哈拉语系和科伊桑语系。闪-含语系各族主要分布在北非和东北非。在撒哈拉以南,广泛分布着尼日尔-科尔多凡语系的各族居民,约占全非人口的一半。尼罗-撒哈拉语系,包括桑海语族、撒哈拉语族和沙里-尼罗语族。这一语系的居民主要分布在闪-含语系各族的东南地区,人口较少。使用科伊桑语系诸语言的是布须曼人和霍屯督人,生活在西南非洲的半沙漠地带。
美洲民族 美洲的民族除印第安各族外,多是近代才形成的。从15世纪末开始,欧洲移民陆续迁入,使美洲的民族构成发生了巨大变化,除了属于蒙古人种的印第安人,还有属于欧罗巴人种的欧洲移民,属于尼格罗人种的非洲“黑奴”后裔,以及不同种族互相通婚而形成的混合人种类型。从16世纪开始,经过近500年的重新组合,在美洲已形成了一系列使用印欧语的新兴民族。他们全是混血民族,只是在不同地区混入的种族成分有所不同。
现代美洲民族的语言主要属于印欧语系的两个语族:罗曼语族(西班牙语、葡萄牙语、法语和日耳曼语族(英语)。
大洋洲民族 住在大洋洲的居民,主要是欧洲、美洲和亚洲的移民及其后裔。大洋洲各土著民族,多属澳大利亚人种以及各种混合类型。其语言多属南岛语系的波利尼西亚、美拉尼西亚和密克罗尼西亚3大语族,少数属澳大利亚诸语和巴布亚诸语。
以上就是关于数据库都有哪些全部的内容,包括:数据库都有哪些、查询是对数据库中信息的寻找和定位对不对、如何写出高性能SQL语句等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)