• 专业师傅

  • 全国服务

  • 质量保障

欢迎进入啄木鸟问答频道,这里提供最专业的问答知识
搜索答案
我要提问

SQL的索引是什么意思

3580人浏览 2023-09-22
我来答
    取消
    提交回答
6个回答
  • grygdd
    grygdd

    2023-09-22

    最优回答

    个人理解,不是概念,详细的可以百度:键,分主键外键,与其他表引用的连接关联,作用在列上,一个表的主键可以是另外一个表的外键约束,顾名思义就是区分其他字段,比如primary key主键约束,foreign key外键约束,或者unique约束,check约束触发器,顾名思义就是一个条件引起另外一个条件的变化,可以监控某个表,比如一旦某个表有增删改的操作,就把增删改的行为发到这个表中作为记录索引,相当于把一堆乱七八糟的毛线整理成有条理,当按照建索引的字段去查数据时速度是相当的快统计信息描述数据库中表,索引的大小,规模,数据分布状况等的一类信息。一般从数据字段视图中察看统计信息状况,如DBA_TABLES,DBA_INDEXES,DBA_TAB_COL_STATISTICS, DBA_TAB_HISTOGRAMS 等

    0
  • bbg1116
    bbg1116

    2023-09-22

    当创建一个新索引,或重建一个存在的索引时,你可以指定一个填充因子,它是在索引创建时索引里的数据页被填充的数量。填充因子设置为100意味着每个索引页100%填满,50%意味着每个索引页50%填满。如果你创建一个填充因子为100的聚集索引(在一个非单调递增的列上),那意味着每当一个记录被插入(或修改)时,页拆分都会发生,因为在现存的页上没有这些数据的空间。很多的页拆分会降低sqlserver的性能。举个例子:假定你刚刚用缺省的填充因子新创建了一个索引。当sqlserver创建它时,它把索引放在相邻的物理页面上,因为数据能够顺序的读所以这样会有最优的i/o访问。但当表随着、、增加和改变时,发生了页拆分。当页拆分发生时,sqlserver必须在磁盘的某处分配一个新的页,这些新的页和最初的物理页不是连续的。因此,访问使用的是随机的i/o,而不是有顺序的i/o,这样访问索引页会变得更慢。那么理想的填充因子是多少呢?它依赖于应用程序对sqlserver表的读和写的比率。首要的原则,按照下面的指导:低更改的表(读写比率为100:1):100%的填充因子高更改的表(写超过读):50-70%的填充因子读写各一半的:80-90%的填充因子在为应用程序找到最优的填充因子前也不得不进行试验。不要假定一个低的填充因子总比高的好。低的填充因子会减少页拆分,它也增加了sqlserver查询期间读的页数量,从而减少性能。太低的填充因子不仅增加i/o开销,也影响缓存。当数据页从磁盘移到缓存中时,整个页(包括空的空间)都移到缓存中。所以填充因子越低,不得不移到sqlserver缓存中的页面就越多,意味着同时为其他重要数据页驻留的空间就少,从而降低性能。如果你没有指定填充因子,缺省的填充因子时0,意味着100%的填充因子(索引的叶页100%的填满,但索引的中间页有预留的空间)。作为监控的一部分,你要决定新建索引或重建索引时的填充因子是多少。事实上,除了只读数据库,所有的情况,缺省值0都是不适合的。

    0
  • luogq2023
    luogq2023

    2023-09-22

    一般来说有没有索引程序都是那样设计,只有有了索引后数据库管理系统它会自动去按合适的索引去查找。

    0
  • s15505037788
    s15505037788

    2023-09-22

    做了约束关系和索引关系。先进行解除关系,再执行你的语句,就行。

    0
  • fipjgzcmri
    fipjgzcmri

    2023-09-22

    索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。 假设我们创建了一个名为people的表: CREATE TABLE people ( peopleid SMALLINT NOT NULL, name CHAR(50) NOT NULL ); 然后,我们完全随机把1000个不同name值插入到people表。下图显示了people表所在数据文件的一小部分: 可以看到,在数据文件中name列没有任何明确的次序。如果我们创建了name列的索引,MySQL将在索引中排序name列: 对于索引中的每一项,MySQL在内部为它保存一个数据文件中实际记录所在位置的“指针”。因此,如果我们要查找name等于“Mike”记录的peopleid(SQL命令为“SELECT peopleid FROM people WHERE name='Mike';”),MySQL能够在name的索引中查找“Mike”值,然后直接转到数据文件中相应的行,准确地返回该行的peopleid(999)。在这个过程中,MySQL只需处理一个行就可以返回结果。如果没有“name”列的索引,MySQL要扫描数据文件中的所有记录,即1000个记录!显然,需要MySQL处理的记录数量越少,则它完成任务的速度就越快。满意请采纳

    0
  • windyminc
    windyminc

    2023-09-22

    SQL索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

    0
推荐维修服务:若未解决您的问题,请您直接联系客服或拨打电话: 为你解忧
正规家庭维修哪家好?

·找啄木鸟家庭维修

·人才库累计注册数十万维修工程师

·信息严格加密,放心预约

·预约只需6秒快速完成!

请选择分类
      获取验证码
      维修服务推荐
      特别推荐

      友链交换:
      手机维修