SQLServer联合主键、联合索引

1.联合主键

        SQL server 中给表增加联合主键的两种方法

                第一种方法,新建表时增加联合主键:

create table t_students(
	id int not null,
	name varchar(10) not null Primary Key (id, name),
	age int,
	dept_id int
)

               注:联合主键的列需要限制非空约束。

                第二种方法,给已有表增加联合主键:

create table t_dept(
	dept_id int,
	dept_name varchar(20),
	stamp varchar(100)
)
--先设置非空约束
Alter table t_dept alter column dept_id int not null 
Alter table t_dept alter column dept_name varchar(20) not null 
--增加主键
Alter table t_dept add constraint pk_t_dept primary key( dept_id, dept_name)

        SQL Server联合主键的影响与利用

        SQL Server 联合主键是数据库管理系统中各种表最为重要的设计元素。它包含多个字段的一组,用于标识数据库中的唯一记录,并保护数据库的完全性。

        SQL 联合主键的使用有以下影响:

                1.保护完全性:联合主键的最重要的功能之一是用于保护表中记录的完全性。例如,可以将表中的信息链接起来,已避免违背业务规则。

                2.提高性能查询:SQL 中,联合主键可以帮助优化数据库查询。使复杂或者特定字段频繁查询的效率更加高效,从而提高查询性能。

                3.增强安全性:使用联合主键可以禁止未授权的访问,以避免意外地更改或删除数据库中的信息。

2.联合索引

        在数据库中,索引是提高查询性能的重要机制。SQL 提供多种类型的索引,其中联合索引是非常常用的索引类型。

        联合索引,也被成为复合索引或多列索引,顾名思义,是一种包含多列的索引。与单列索引相比,联合索引可以根据多个列的值进行排序和搜索,从而提高性能。联合索引遵循最左匹配原则,即索引的第一列被视为最重要的列,其次是第二列,以此类推。

        创建联合索引

        在SQL Server中,可以使用CREATE INDEX 语句来创建联合索引。下面是一个创建联合索引的实例:

CREATE INDEX idx_name ON table_name (column1, column2, column3);

         在上述实例中,index_name是索引的名称,table_name是表的名称,olumn1, column2, column3是需要包含在索引中的列名。可以根据实际需要定义包含的列数。

        使用联合索引

       联合索引在查询时可以提供更高的性能。当查询条件中涉及到联合索引的列时,数据库引擎可以直接使用索引来查找匹配的行,而无需扫描整个表。

        下面是一个使用联合索引的查询示例:

SELECT * FROM table_name WHERE column1 = value1 AND column2 = value2;

        联合索引的注意事项:最左匹配原则

                1.列的顺序:最常用的列放在左侧,方便利用索引提供的性能优势

                2.列的选择:选择经常用户查询调价你的列来创建索引

                3.索引维护开销:创建联合索引会增加数据库的额外开销。每当插入、更新或删除行时,数据库引擎都需要更新相关的索引。因此,在创建联合索引时,需要权衡索引的性能提升和维护开销之间的关系。

面试可能会问到的问题:

        1.现有联合索引(a,b,c)

select * from table where c=1,b=2,a=3;

上面这条SQL走不走索引

答: 走。MYSQL的优化器会自动调整条件顺序,a在最左侧,可以命中最左原则。

select * from table where c=1,b=2;

答:不走索引,最左前缀不匹配,直接跳过,没法使用联合索引。

        2.现有联合索引(b,c)

select a,b,c from table where c=2,b=1;

答:索引不能覆盖SQL所有查询字段,a不在(b,c)的联合索引中,所以在查询数据,还需要回表去查询,去主键索引中去查

selset b,c from table where c=2,b=1;

答直接使用联合索引就能返回结果

        3.下面这条SQL语句如何创建索引

select *from table where a=x and b>x and c=x

答:建立(a, c, b )的联合索引,a和c是等值条件,能快速的过滤数据,b是范围查询,放在最后,避免阻断后面的字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值