`

筛选索引简单使用

 
阅读更多
对于在强制实施数据完整性时的一种常见需求,也可以用筛选索引来解决。出于强制唯一性的目的,SQL Server支持的UNIQUE约束认为两个NULL是相等的,这意味着,如果在一个允许为NULL的列上定义了一个UNIQUE约束,那么这个列上就只能有一行可以为NULL。但在一些情况下,可能只需要对非NULL值强制实施唯一性约束,允许存在多个NULL值。ANSI SQL确实支持这种UNIQUE约束,但SQL SERVER还从未实施过这种约束。现在,有了筛选索引,这种需求解决起来也不难。只要创建一个唯一的筛选索引,将其筛选谓词定义为WHERE<列>IS NOT NULL。例如,运行以下代码,创建一个T1表,并在它的COLL列 定义一个这样的筛选索引:
IF OBJECT_ID('dbo.T1', 'U') IS NOT NULL DROP TABLE dbo.T1;
CREATE TABLE dbo.T1(col1 INT NULL, col2 VARCHAR(10) NOT NULL);
GO
CREATE UNIQUE NONCLUSTERED INDEX idx_col1_notnull
  ON dbo.T1(col1)
  WHERE col1 IS NOT NULL;
GO
  

将以下代码运行2次,尝试向表中插入2行COL1列具有相同非NUL值的行
INSERT INTO dbo.T1(col1, col2)
  VALUES(1, 'a');

代码的第2次运行将失败,提示以下错误信息:/*
Msg 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in object 'dbo.T1' with unique index 'idx_col1_notnull'.
The statement has been terminated.
*/
将以下代码运行2次,尝试向表中插入2行COL1列为NULL的行:
-- Run following twice
INSERT INTO dbo.T1(col1, col2)
  VALUES(NULL, 'a');

这次两行都插入了。
-- Cleanup
DROP INDEX Sales.SalesOrderHeader.idx_currate_notnull;
分享到:
评论

相关推荐

    MS Sql 2005 全文索引

    全文索引是一种特殊类型的索引,不同于传统的 B-tree 结构索引,它通过使用特殊的标记技术和语言分析技术来维护索引。全文索引主要针对的是文本型数据,能够根据特定语言的规则对词汇进行索引,从而实现基于关键字的...

    mysql高性能索引查询(查询性能问题、索引使用原则、索引创建、索引的优点缺点).docx

    单列索引是最简单的索引类型,它仅包含表中的一个字段。这种类型的索引易于创建和使用,适用于那些频繁查询单一字段的情况。 例如,为了提高基于用户ID的查询效率,可以在`ds_order`表中为`user_id`字段创建索引。 ...

    SQL索引使用方略(系统而全面)

    4. **简化查询**:使用合适的索引可以让查询更加简单高效。 5. **支持高效的连接操作**:通过索引来优化表之间的连接操作。 6. **减少使用全表扫描**:在大多数情况下,索引能避免执行全表扫描,从而显著提高效率。 ...

    histcite(文献索引分析软件) 附使用教程.rar

    《histcite:文献索引分析利器及使用指南》 histcite是一款专为科研工作者设计的文献索引分析软件,尤其适合硕士研究生、博士生以及大学教师等人群使用。这款工具的强大之处在于,它能帮助用户通过输入关键词快速...

    数据库性能调优技术--索引调优

    2. **合理使用组合索引:** 组合索引(如`(C1, C2)`)允许查询利用多个列进行筛选。例如,查询`SELECT * FROM T1 WHERE C1 = 1 AND C2 = 2`可以使用组合索引`IT1C1C2(C1, C2)`。需要注意的是,组合索引的顺序非常...

    FTP目录索引和查找示例

    以下是一个简单的Python FTP查找示例,使用`ftplib`库查找特定文件: ```python import ftplib def find_file_in_ftp(host, username, password, filename): try: ftp = ftplib.FTP(host) ftp.login(username, ...

    Python自动办公实例-在Excel中按条件筛选数据并存入新的表.zip

    Python以其强大的数据处理库,如pandas,使得自动化处理Excel文件变得简单高效。这个压缩包文件包含了一个具体的例子,展示了如何根据特定条件筛选Excel数据,并将筛选结果存入新的工作表。 首先,我们需要导入...

    Explain详解与索引优化

    4. **复合索引**:如果一个查询涉及多个列,可以考虑创建复合索引,将最常用于筛选的列放在前面。 另外,还要注意避免在索引列上使用不等运算符、函数或计算表达式,这可能会导致索引失效。同时,合理使用覆盖索引...

    SQLServer索引对查询条件的影响

    在数据库管理和优化领域,索引的合理设计与使用对于提高查询性能具有至关重要的作用。本文将基于一个具体的示例表`TABLE1`来探讨SQL Server中索引对查询条件的影响,以及如何通过调整查询条件顺序来优化查询效率。 ...

    仿京东商品筛选导航菜单

    6. **数据处理**:后端需要处理筛选请求,可能需要对数据库进行查询优化,如建立索引、使用JOIN操作等,以提高查询效率。 7. **缓存策略**:为了提升性能,可以缓存用户的筛选结果,当用户再次访问相同的筛选条件时...

    给MySQL建立索引1

    在MySQL中,为数据库表的列创建索引可以优化查询性能,尤其对于频繁进行筛选和排序的字段,索引的作用更加显著。 首先,我们来看一个简单的例子。假设我们有一个名为`mytable`的表,包含`id`(主键)、`category_id...

    分布式索引系统架构实践.pdf

    * 倒排索引:TRS架构使用倒排索引来提供高性能的分布式索引服务。 * 正排索引:TRS架构使用正排索引来提供高性能的分布式索引服务。 * 插件化设计:TRS架构使用插件化设计来提供灵活可配的分布式索引服务。 * ...

    织梦筛选插件

    安装织梦筛选插件的过程相对简单,一般只需将下载的压缩包解压后,将其中的文件上传到织梦系统的相应目录,并在后台进行相应的配置。具体步骤可能包括:登录织梦后台,进入“模块”管理,选择“上传新模块”,然后...

    筛选素数问题

    时间复杂度方面,筛选素数法的时间复杂度大约为O(n log log n),远优于简单的质因数分解或试除法,后者的时间复杂度为O(n^1.5)或更高。 总之,筛选素数问题是一个经典的算法问题,通过使用筛选法,我们可以快速有效...

    MySQL索引与Index Condition Pushdown

    - 而有了ICP之后,MySQL可以直接在存储层(即索引层)对每一行数据进行筛选,只有真正满足所有条件的数据才会被返回给服务器层处理。 ##### 3. 实验演示 为了更好地理解ICP的效果,我们可以通过一个简单的实验来...

    tableView右侧索引

    这个简单的demo可能没有做过多的封装,但它是学习和理解右侧索引工作原理的好起点。实际项目中,为了代码的可复用性和可维护性,通常会将这部分功能封装到一个自定义的UITableView类别或者扩展中。 在阅读和理解这...

    Solr全文索引

    - **代码示例**:创建一个Document对象,填充字段值,然后使用SolrServer.Add方法将其添加到索引;构建SolrQuery,执行Search方法获取结果。 综上所述,"Weiz.Solr"可能是一个类似SolrNet的C#客户端库,用于简化C#...

    商品筛选同类,排序

    - 数据库索引的合理设置对提高筛选和排序速度至关重要,尤其是对于经常被搜索的属性,应建立索引以加速查询。 2. 商品筛选: - 用户界面:在前端,需要设计一个类似淘宝的商品筛选面板,让用户可以多选属性进行...

Global site tag (gtag.js) - Google Analytics