用SQL建立索引

用SQL建立索引
    为了给一个表建立索引,启动任务栏SQL Sever程序组中的ISQL/w程序。进入查询窗口后,输入下面的语句:

       CREATE INDEX mycolumn_index ON mytable (myclumn)

    这个语句建立了一个名为mycolumn_index的索引。你可以给一个索引起任何名字,但你应该在索引名中包含所索引的字段名,这对你将来弄清楚建立该索引的意图是有帮助的。
    注意:
    执行后,都会收到如下的信息:
    This   command did not return data,and it did not return any rows
这说明该语句执行成功了。
索引mycolumn_index对表mytable的mycolumn字段进行。这是个非聚簇索引,也是个非唯一索引。(这是一个索引的缺省属性)
如果你需要改变一个索引的类型,你必须删除原来的索引并重建 一个。建立了一个索引后,你可以用下面的SQL语句删除它:

DROP INDEX mytable.mycolumn_index

注意在DROP INDEX 语句中你要包含表的名字。在这个例子中,你删除的索引是mycolumn_index,它是表mytable的索引。
要建立一个聚簇索引,可以使用关键字CLUSTERED。记住一个表只能有一个聚簇索引。
这里有一个如何对一个表建立聚簇索引的例子:

CREATE CLUSTERED INDEX mycolumn_clust_index ON mytable(mycolumn)

如果表中有重复的记录,当你试图用这个语句建立索引时,会出现错误。但是有重复记录的表也可以建立索引;你只要使用关键字ALLOW_DUP_ROW把这一点告诉SQL Sever即可:

CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW

这个语句建立了一个允许重复记录的聚簇索引。你应该尽量避免在一个表中出现重复记录,但是,如果已经出现了,你可以使用这种方法。
要对一个表建立唯一索引,可以使用关键字UNIQUE。对聚簇索引和非聚簇索引都可以使用这个关键字。这里有一个例子:

CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

这是你将经常使用的索引建立语句。无论何时,只要可以,你应该尽量对一个对一个表建立唯一聚簇索引来增强查询操作。
最后,要建立一个对多个字段的索引──复合索引──在索引建立语句中同时包含多个字段名。下面的例子对firstname和lastname两个字段建立索引:

CREATE INDEX name_index ON username(firstname,lastname)

这个例子对两个字段建立了单个索引。在一个复合索引中,你最多可以对16个字段进行索引。

 

--联接
SELECT
FROM dbo.k_baoming INNER JOIN
      dbo.k_kebiao ON dbo.k_baoming.o_flowid = dbo.k_kebiao.f_apply_id


--左向外联接
SELECT dbo.k_baoming.o_flowid
FROM dbo.k_baoming LEFT OUTER JOIN
      dbo.k_kebiao ON dbo.k_baoming.o_flowid = dbo.k_kebiao.f_kebiaoID

--右向外联接
SELECT dbo.k_baoming.o_flowid
FROM dbo.k_baoming RIGHT OUTER JOIN
      dbo.k_kebiao ON dbo.k_baoming.o_flowid = dbo.k_kebiao.f_kebiaoID

--完整外部联接
SELECT dbo.k_baoming.o_flowid
FROM dbo.k_baoming FULL OUTER JOIN
      dbo.k_kebiao ON dbo.k_baoming.o_flowid = dbo.k_kebiao.f_kebiaoID


--可以不要OUTER

### 什么是 SQL 索引SQL 索引是一种数据库对象,用于提高查询效率。索引类似于书籍的目录,它允许数据库系统快速定位到表中的特定数据行,而无需扫描整个表[^1]。 索引的核心作用是优化数据检索的速度。当没有索引时,数据库必须进行全表扫描,即逐行检查以找到匹配的数据。这种操作在大数据量的情况下会导致性能下降。通过创适当的索引,可以显著减少查询所需的时间和资源消耗[^2]。 --- ### 索引的作用与目的 #### 提高查询速度 索引的主要目的是加速数据访问。例如,在一个包含数百万条记录的用户表中,如果经常需要根据用户名查找用户信息,则在 `username` 字段上建立索引可以大幅减少查询时间。数据库可以直接跳转到相关记录,而不是逐行扫描整个表[^3]。 #### 加速连接操作 在涉及多个表的连接查询(如 `JOIN` 操作)时,索引可以加快关联字段的匹配过程。例如,若两个表通过 `role_id` 进行连接,则在该字段上建立索引可提升连接效率[^4]。 #### 支持唯一性约束 某些类型的索引(如唯一索引)不仅提高查询性能,还能确保数据的完整性。例如,使用 `CREATE UNIQUE INDEX` 可防止在指定列中插入重复值,从而保证数据的一致性和准确性[^4]。 #### 排序与分组优化 索引还可以优化 `ORDER BY` 和 `GROUP BY` 操作的执行效率。如果排序或分组字段已经建立索引,数据库可以直接利用索引的有序结构,避免额外的排序操作。 --- ### 不同类型索引的目的 #### 聚集索引 聚集索引决定了表中数据的物理存储顺序。一个表只能有一个聚集索引,因为它直接影响了数据的排列方式。例如,若在一个用户表上对 `user_id` 建立聚集索引,则数据库将按照 `user_id` 的顺序来组织存储数据[^2]。 #### 非聚集索引 非聚集索引不改变数据的实际存储顺序,而是维护一个独立的结构,指向数据行的位置。它的作用类似于字典的部首索引:虽然索引项是按一定顺序排列的,但它们所对应的记录可能分散在不同的物理位置上[^3]。 #### 唯一索引 唯一索引用于确保某列或组合列中的值是唯一的,常用于主键或唯一约束字段。它可以防止重复值的插入,从而保障数据一致性[^4]。 --- ### 创索引的语法示例 以下是一些常见的索引方法: ```sql -- 创聚集索引 CREATE CLUSTERED INDEX idx_role_id ON roles(role_id); ``` ```sql -- 创唯一索引 CREATE UNIQUE INDEX idx_username ON users(username); ``` ```sql -- 修改表结构添加索引 ALTER TABLE mount_info ADD INDEX idx_role_id (role_id); ``` ```sql -- 创表时直接指定索引 CREATE TABLE users ( id INT PRIMARY KEY, username VARCHAR(50), INDEX idx_username (username) ); ``` --- ### 总结 SQL 索引建立旨在提高查询性能、支持高效连接、实现唯一性约束以及优化排序和分组操作。合理使用索引可以显著提升数据库系统的响应速度和吞吐量,但同时也需要注意索引的维护成本,避免过度索引带来的负面影响。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值