我想知道数据库中设置主键的作用

我想知道数据库中设置主键的作用,第1张

数据库主键指的是一个列或多个列组合,其值能唯一标注表中的每一行,通过他可以强制表的实体完整性。主键可以用来表示一个精确定位的特定行,如果没有主键,无法精准定位一条记录是否就是你要的相关行记录,这样就会导致更新或者删除表中特定的行很困难。如果有主键来约束行记录的唯一性后,就可以用主键来解决问题。

主键可以用来表示一个精确定位的特定行,如果没有主键,无法精准定位一条记录是否就是你要的相关行记录,这样就会导致更新或者删除表中特定的行很困难。如果有主键来约束行记录的唯一性后,就可以用主键来解决问题。

主键作用:

1、保证实体的完整性;

2、加快数据库的 *** 作速度;

3、在表中添加记录时,DBMS会自动检查记录的主键值,不允许该值与其他值重复。

扩展资料

数据库中主键、主码、主属性、关键字、候选关键字、码的区别:

主码=主键=主关键字,关键字=候选码 候选关键字=候选码中除去主码的其他候选码。

码:唯一标识实体的属性或属性组合称为码。

候选码(关键字):某一属性组的值能唯一标识一个元组而其子集不能(去掉任意一个属性都不能标识该元组),则称该属性组为候选码(补充元组:表中的一行即为一个元组)

主属性:候选码包含的属性(一个或多个属性)。

主码(主键、主关键字):若一个关系有多个候选码,选择其中一个为主码。

关键字就是为了方便编程人员在打开数据库的时候知道每个表所代表的值是什么。主要起到注释作用。

索引可以提高查询的速度。

其实主键和索引都是键,不过主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在在数据库中,主键一般都要建,主要是用来避免一张表中有相同的记录,索引一般可以不建,但如果需要对该表进行查询 *** 作,则最好建,这样可以加快检索的速度 。

创建索引最快了,但会影响插入,更新速度。依情况而定

如果对某字段查询多过就加所以

create index index_name on table_name(column_name)

比如 电信公司 那里,有个 电话记录表

包含下面的字段

日期/时间 打电话的号码 接电话的号码 接通时间 接入交换机 很多字段

如果没有索引, 你要去查询 这个月, 谁给你打电话了

那么 数据库要把 这一个月的所有记录, 都读取出来

也就是差不多要 “全表扫描”了

分析 接电话的号码 是不是 等于 你家的电话号码

如果是的话, 还要把 打电话的号码 返回给你

如果 在 接电话的号码 字段上面,有个索引

那么 数据库 就可以迅速的定位到你的号码

索引的机制,就是 一个 类似 树形的存储结构

比我数据大的,都在我的左边的节点那里

比我数据小的,都在我的右边的节点那里

这样,可以迅速的 找到你家的电话号码

找到你家的电话号码之后

索引那里,存储有 记录的 实际的 物理地址

然后,数据库,根据物理地址

只检索那几条特定的记录

然后把那几条特定的记录的 打电话的号码 返回给你

分布式系统就是将系统的应用层,数据层或其它部分构架成分布(物理和逻辑上的都可以)状(通常是网状)。分布式系统通常是为了增强系统的可扩展性、稳定性和执行效率。比如在线游戏通常就是分布系统,里面所谓的“区”就是分布系统里子例程。而分布式数据库其实也可以称作分布式系统,数据持久化层是分布的(数据存在不同的数据库中,可交互,有一套综管系统来维护数据的完整性和准确性)。所以说分布式系统更准确地说是一种系统构架概念,不是一种技术。

提高查询速度。

1、用程序中,

保证在实现功能的基础上,尽量减少对数据库的访问次数;

通过搜索参数,尽量减少对表的访问行数

最小化结果集,从而减轻网络负担;

够分开的 *** 作尽量分开处理,提高每次的响应速度;

在数据窗口使用

SQL 时,尽量把使用的索引放在选择的首列;

算法的结构尽量简单;

在查询时,不要过多地使用通配符如

SELECT FROM T1 语句,要用到几列就选择几列如:

SELECT COL1,COL2 FROM T1 ;

在可能的情况下尽量限制尽量结果集行数如:

SELECT TOP 300 COL1,COL2,COL3 FROM T1,

因为某些情况下用户是不需要那么多的数据的。

不要在应用中使用数据库游标,游标是非常有用的工具,但比使用常规的、面向集的SQL语句需要更大的开销;

按照特定顺序提取数据的查找。

2、避免使用不兼容的数据类型。例如

float和int、char和varchar、binary和varbinary是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化 *** 作。

例如: 

SELECT name FROM employee WHERE salary >60000

在这条语句中,如salary字段是money型的,则优化器很难对其进行优化,因为60000是个整型数。 

我们应当在编程时将整型转化成为钱币型,而不要等到运行时转化。 

3、尽量避免在WHERE子句中对字段进行函数或表达式 *** 作,这将导致引擎放弃使用索引而进行全表扫描。如:

SELECT FROM T1 WHERE F1/2=100 应改为 

SELECT FROM T1 WHERE F1=1002 

SELECT FROM RECORD WHERE SUBSTRING(CARD_NO,1,4)=’5378’

应改为: 

SELECT FROM RECORD WHERE CARD_NO LIKE ‘5378%’

SELECT member_number, first_name, last_name 

FROM members

WHERE DATEDIFF(yy,datofbirth,GETDATE()) > 21

应改为: 

SELECT member_number, first_name, last_name 

FROM members

WHERE dateofbirth< DATEADD(yy,-21,GETDATE()) 

即:任何对列的 *** 作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将 *** 作移至等号右边。

4、避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN等这样的 *** 作符因为这会使系统无法使用索引,

而只能直接搜索表中的数据。例如:

SELECT id FROM employee WHERE id != 'B%' 

优化器将无法通过索引来确定将要命中的行数,因此需要搜索该表的所有行。

5、尽量使用数字型字段,一部分开发人员和数据库管理人员喜欢把包含数值信息的字段设计为字符型, 

这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,

而对于数字型而言只需要比较一次就够了。

6、合理使用EXISTS,NOT EXISTS子句。如下所示:

1SELECT SUM(T1C1)FROM T1

WHERE( (SELECT COUNT()FROM T2 WHERE T2C2=T1C2>0)

2SELECT SUM(T1C1) FROM T1 WHERE EXISTS( 

SELECT FROM T2 WHERE T2C2=T1C2) 

两者产生相同的结果,但是后者的效率显然要高于前者。因为后者不会产生大量锁定的表扫描或

是索引扫描。 

如果你想校验表里是否存在某条纪录,不要用count()那样效率很低,而且浪费服务器资源。

可以用EXISTS代替。如:

IF (SELECT COUNT() FROM table_name WHERE column_name = 'xxx')

可以写成: 

IF EXISTS (SELECT FROM table_name WHERE column_name = 'xxx') 

经常需要写一个T_SQL语句比较一个父结果集和子结果集,

从而找到是否存在在父结果集中有而在子结果集中没有的记录,如: 

1SELECT ahdr_key FROM hdr_tbl a

---- tbl a 表示 tbl 用别名a代替

WHERE NOT EXISTS (SELECT FROM dtl_tbl b WHERE ahdr_key = bhdr_key) 

2SELECTahdr_key FROM hdr_tbl a LEFT JOIN dtl_tbl b ON ahdr_key = bhdr_key 

WHERE bhdr_key IS NULL 

3SELECT hdr_key FROM hdr_tbl WHERE hdr_key NOT IN (SELECT hdr_key FROM dtl_tbl)

三种写法都可以得到同样正确的结果,但是效率依次降低。

7、尽量避免在索引过的字符数据中,使用非打头字母搜索。这也使得引擎无法利用索引。

见如下例子:SELECT FROM T1 WHERE NAME LIKE ‘%L%’

SELECT FROM T1 WHERE SUBSTING(NAME,2,1)=’L’ 

SELECT FROM T1 WHERE NAME LIKE ‘L%’

即使NAME字段建有索引,前两个查询依然无法利用索引完成加快 *** 作,引擎不得不对全表所

有数据逐条 *** 作来完成任务。而第三个查询能够使用索引来加快 *** 作。 

8、充分利用连接条件,在某种情况下,两个表之间可能不只一个的连接条件,这时在 

WHERE 子句中将连接条件完整的写上,有可能大大提高查询速度。例:

SELECT SUM(AAMOUNT) FROM ACCOUNT A,CARD B WHERE ACARD_NO = BCARD_NO 

SELECT SUM(AAMOUNT) FROM ACCOUNT A,CARD B WHERE ACARD_NO = BCARD_NO 

AND AACCOUNT_NO=BACCOUNT_NO

第二句将比第一句执行快得多。 

9、消除对大型表行数据的顺序存取,尽管在所有的检查列上都有索引,但某些形式的

WHERE子句强迫优化器使用顺序存取。如: 

SELECT FROM orders WHERE (customer_num=104 AND order_num>1001) OR

order_num=1008 解决办法可以使用并集来避免顺序存取: 

SELECT *FROM orders WHERE customer_num=104 AND order_num>1001

UNION SELECT *FROM orders WHERE order_num=1008 这样就能利用索引路径处理查询。 

10、避免困难的正规表达式。

LIKE关键字支持通配符匹配,技术

你的数据库是什么数据库?如果是ACCESS,建议你导入到MySQL中去,MySQL据说是世界上执行速度最快的数据库了,如果是MSSQL,请使用

存储过程

执行查询,可以大提高数据库的

运行速度

。你的问题我曾经碰到过,当时我使用的是

ACCESS数据库

,数据库中的数据达到20万条记录了,查询起来速度特慢,后来改用MSSQL的存储过程,速度提高了很多,你试试吧,祝你成功!

以上就是关于我想知道数据库中设置主键的作用全部的内容,包括:我想知道数据库中设置主键的作用、怎样加快SQL数据库的查询速度,请说的详细一点、access数据库 通过为数据表建立索引,能够加快在字段中搜索及排序的速度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存