- 索引和主键的区别:
- 主键是索引,但索引不一定是主键
- 主键具有唯一性,而只有唯一性索引才具有唯一性
- 主键的值不能为空,不能重复,所以可以再程序中动态创建删除,也可以是任意有序的字段
- 索引只是加快查询,排序速度,主键和外键定义后可以保证数据完整性
什么是索引
拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K 。为了加快查找的速度,汉语字(词)典一般都有按拼音、笔画、偏旁部首等排序的目录(索引),我们可以选择按拼音或笔画查找方式,快速查找到需要的字(词)。
同理,SQL Server允许用户在表中创建索引,指定按某列预先排序,从而大大提高查询速度。
• SQL Server中的数据也是按页( 4KB )存放
• 索引:是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据 。
• 索引页:数据库中存储索引的数据页;索引页类似于汉语字(词)典中按拼音或笔画排序的目录页。
• 索引的作用:通过使用索引,可以大大提高数据库的检索速度,改善数据库性能。
索引类型
• 唯一索引:唯一索引不允许两行具有相同的索引值
• 主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空
• 聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个
• 非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个
索引类型:再次用汉语字典打比方,希望大家能够明白聚集索引和非聚集索引这两个概念。
唯一索引:
唯一索引不允许两行具有相同的索引值。
如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,如果在stuInfo表中的学员员身份证号(stuID) 列上创建了唯一索引,则所有学员的身份证号不能重复。
提示:创建了唯一约束,将自动创建唯一索引。尽管唯一索引有助于找到信息,但为了获得最佳性能,建议使用主键约束或唯一约束。
主键索引:
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。
聚集索引(clustered index)
在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同。表只能包含一个聚集索引。例如:汉语字(词)典默认按拼音排序编排字典中的每页页码。拼音字母a,b,c,d……x,y,z就是索引的逻辑顺序,而页码1,2,3……就是物理顺序。默认按拼音排序的字典,其索引顺序和逻辑顺序是一致的。即拼音顺序较后的字(词)对应的页码也较大。如拼音“ha”对应的字(词)页码就比拼音“ba” 对应的字(词)页码靠后。
非聚集索引(Non-clustered)
如果不是聚集索引,表中各行的物理顺序与键值的逻辑顺序不匹配。聚集索引比非聚集索引(nonclustered index)有更快的数据访问速度。例如,按笔画排序的索引就是非聚集索引,“1”画的字(词)对应的页码可能比“3”画的字(词)对应的页码大(靠后)。
提示:SQL Server中,一个表只能创建1个聚集索引,多个非聚集索引。设置某列为主键,该列就默认为聚集索引
如何创建索引
使用T-SQL语句创建索引的语法:
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]
INDEX index_name
ON table_name (column_name…)
[WITH FILLFACTOR=x]
q UNIQUE表示唯一索引,可选
q CLUSTERED、NONCLUSTERED表示聚集索引还是非聚集索引,可选
q FILLFACTOR表示填充因子,指定一个0到100之间的值,该值指示索引页填满的空间所占的百分比
在stuMarks表的writtenExam列创建索引:
USE stuDB
GO
IF EXISTS (SELECT name FROM sysindexes
WHERE name = 'IX_writtenExam')
DROP INDEX stuMarks.IX_writtenExam
/*--笔试列创建非聚集索引:填充因子为30%--*/
CREATE NONCLUSTERED INDEX IX_writtenExam
ON stuMarks(writtenExam)
WITH FILLFACTOR= 30
GO
/*-----指定按索引 IX_writtenExam 查询----*/
SELECT * FROM stuMarks (INDEX=IX_writtenExam)
WHERE writtenExam BETWEEN 60 AND 90
虽然我们可以指定SQL Server按哪个索引进行数据查询,但一般不需要我们人工指定。SQL Server将会根据我们创建的索引,自动优化查询 。
索引的优缺点
• 优点
– 加快访问速度
– 加强行的唯一性
• 缺点
– 带索引的表在数据库中需要更多的存储空间
– 操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新
创建索引的指导原则
• 请按照下列标准选择建立索引的列。
– 该列用于频繁搜索
– 该列用于对数据进行排序
• 请不要使用下面的列创建索引:
– 列中仅包含几个不同的值。
– 表中仅包含几行。为小型表创建索引可能不太划算,因为SQL Server在索引中搜索数据所花的时间比在表中逐行搜索所花的时间更长
相关推荐
综上所述,数据库索引设计和优化是一个涉及多方面因素的复杂过程,需要结合业务需求、数据特性和系统资源,进行全面考虑和精细调整,才能实现最佳的系统性能。通过学习《数据库索引设计与优化》这样的专业书籍,我们...
在数据库中,索引、主键和约束是至关重要的概念,而SQL(Structured Query Language)则是与数据库交互的语言。 首先,索引是提高数据库查询速度的关键工具。它们类似于书籍的目录,使得数据库能够快速定位到特定的...
数据库索引技术是数据库管理系统中的核心组成部分,它极大地提高了数据查询效率,使得在海量数据中查找特定信息变得迅速。下面将分别对标题和描述中提到的各个知识点进行详细阐述。 首先,我们来看“文件记录的组织...
数据库索引作为数据库管理系统(DBMS)中的关键技术之一,其作用在于优化数据的检索速度和确保数据的唯一性。本文将深入探讨数据库索引的优缺点,以及如何在实际操作中合理地运用索引来提升数据库性能。 ### 数据库...
《Oracle与MySQL数据库索引设计与优化》这本书深入探讨了两个主流关系型数据库管理系统——Oracle和MySQL中的索引设计和优化策略。索引是数据库性能的关键因素,它们能够加速数据检索,提高系统效率,尤其在大数据量...
【数据库索引】是数据库管理系统中用于加速数据检索的一种数据结构。索引好比书籍的目录,能够快速定位到所需的数据行。根据物理存储方式,索引分为【聚簇索引】和【非聚簇索引】。聚簇索引是按照数据的实际存储顺序...
例如,针对100万行数据,MyISAM的主键和唯一索引检索速度相似,普通索引慢30%以上;InnoDB中,唯一索引比主键慢9%,普通索引慢50%以上。 总结来说,主键索引和辅助索引在MySQL中扮演着不同的角色,主键负责保证数据...
### 数据库索引 #### 索引的定义 **索引**是在数据库表中用于提高数据检索速度的一种数据结构。它可以显著加快数据检索的速度,但会占用额外的存储空间并可能稍微减慢数据的插入、更新和删除操作。 ##### 聚集...
下面是主键和索引的一些区别与联系。 1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。 所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一...
总的来说,理解和优化数据库索引对于提升SQL Server和Oracle数据库的查询性能至关重要。通过合理地创建、管理和维护索引,可以显著减少查询时间,改善用户体验,并降低服务器资源的消耗。同时,了解并遵循数据库设计...
总结来说,数据库索引对于提升数据库的查询性能具有至关重要的作用,但是它的设计和优化需要根据具体的应用场景和需求进行精细的分析和管理。在设计数据库时,必须平衡索引所带来的益处和成本,合理地利用索引,才能...
在SQL数据库中,主键和外键是关系型数据库设计的核心概念,它们对于确保数据的完整性和一致性至关重要。主键是表中一个或一组字段,它们的值在该表内是唯一的,用来唯一标识一条记录。例如,在学生表中,学号可能是...
在MySQL数据库中,索引是提高查询效率的关键工具。它们为数据表的列提供了...了解各种索引类型、创建方法和可能导致失效的场景,可以帮助数据库管理员更好地管理和优化他们的数据库,从而提高查询效率和整体系统性能。
MySQL数据库索引是指在关系型数据库管理系统中,用于提高查询速度和优化数据库性能的一种机制。索引是对数据库表中某一列或多列的值进行排序和组织,以便快速定位和检索数据。 一、MySQL数据库索引类型 MySQL...
数据库索引原理是数据库...总之,理解数据库索引原理,掌握聚族索引、主键和查询优化的运用,对于提高数据库性能和优化应用程序至关重要。通过不断实践和学习,我们可以更好地应对各种数据库挑战,实现高效的数据管理。
**MySQL数据库索引概述** 索引是数据库管理系统中不可或缺的一部分,尤其在处理大规模数据时,它的存在极大地提高了数据检索的效率。在MySQL中,索引是一个独立的、物理的数据库结构,它由表中一列或多列的集合以及...
1. B-Tree索引:最常见的索引类型,适用于等值查询,包括主键和唯一索引。 2. Bitmap索引:适合于进行多字段组合查询和低基数(非唯一值少)的列,空间占用小,但更新操作成本高。 3. Hash索引:基于哈希表实现,...
数据库索引设计与优化是数据库领域中的核心主题,对于提升数据查询效率至关重要。索引是一种特殊的数据...通过阅读"数据库索引设计与优化-高清版.pdf"这本书,读者可以深入理解这一主题,掌握实际操作中的技巧和策略。
数据库索引是关系型数据库中用于加速数据检索过程的重要技术。...通过本文的学习,读者应已掌握如何在Python中创建和使用数据库索引,以及如何利用索引优化查询效率,进而更好地理解和应用数据库索引技术。
数据库索引在IT领域中扮演...总之,数据库索引是提升查询效率的关键工具,正确地创建和管理索引能显著改善数据库的性能。在设计数据库时,应根据实际需求和查询模式来决定何时以及如何创建索引,以达到最佳的系统性能。