对于在强制实施数据完整性时的一种常见需求,也可以用筛选索引来解决。出于强制唯一性的目的,SQL Server支持的UNIQUE约束认为两个NULL是相等的,这意味着,如果在一个允许为NULL的列上定义了一个UNIQUE约束,那么这个列上就只能有一行可以为NULL。但在一些情况下,可能只需要对非NULL值强制实施唯一性约束,允许存在多个NULL值。ANSI SQL确实支持这种UNIQUE约束,但SQL SERVER还从未实施过这种约束。现在,有了筛选索引,这种需求解决起来也不难。只要创建一个唯一的筛选索引,将其筛选谓词定义为WHERE<列>IS NOT NULL。例如,运行以下代码,创建一个T1表,并在它的COLL列 定义一个这样的筛选索引:
将以下代码运行2次,尝试向表中插入2行COL1列具有相同非NUL值的行
代码的第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的行:
这次两行都插入了。
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;
发表评论
-
转:避免全表扫描的sql优化
2015-02-05 16:37 1322http://tech.diannaodian.com/dw/ ... -
给表加上聚集索引和非聚集索引
2014-12-11 17:28 700创建简单非聚集索引 以下示例为 Purchasing.Pro ... -
查看表中索引语句
2014-12-11 10:37 678SELECT object_name(object_id) ... -
SQL2008一行转多行的精典写法
2013-08-28 12:06 415--创建测试表 create table t1( id ... -
在sql server中利用with as实现递归功能
2013-06-25 10:48 532在sqlserver2005之前,要实现递归功能比较麻烦,比如 ... -
SQL 2005 with(nolock)详解
2013-06-17 17:03 583大家在写查询时, ... -
用SQL语句查询每门成绩都大于80的学生姓名
2013-05-29 10:39 1723昨天遇到的一个SQL面试题,感觉很有趣。 表名stu 结构 ... -
SqlServer强制断开数据库已有连接的方法
2013-02-22 11:03 1619在master数据库中执行如下代码 declare @i IN ... -
Sql获取第一天、最后一天
2013-01-03 14:56 9676① 本月第一天(--减去今天再加上1天) SELECT DAT ... -
表函数与游标
2012-12-25 16:07 743--建立数据源 create table tb1(zm ch ... -
sql server 2005 输出表的函數用法
2012-12-25 16:02 835view sourceprint? 01 --sql ser ... -
SQL杂谈
2012-12-14 17:33 7281、如何用convert什么的把带有时分秒的日期转为时分秒都0 ... -
用FOR XML PATH将查询结果以XML输出
2012-09-20 17:54 1039本文从此而来 http://www.cnblogs.com/d ... -
left join on and
2012-09-20 10:23 886数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临 ... -
排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句
2012-08-10 10:36 6629--在部门内新水排名(如果有相同名次,用dense_rank) ... -
SQL SERVER 中行列转换 PIVOT UNPIVO
2012-08-18 15:34 2330PIVOT用于将列值旋转为列名、同时执行聚合运算(即行转列), ... -
Apply简单使用举例
2012-08-09 17:20 1027APPLY APPLY运算符把右表表达式应用左输入中 ... -
SQL Server 2008语句大全完整版
2012-08-09 10:39 1391--======================== ... -
Not Exists练习
2012-07-23 14:40 888IF OBJECT_ID(N'a') IS NOT NU ... -
Exists练习查找最小缺失值(Missing Value)
2012-07-17 09:34 996第一种方法 USE tempdb; GO IF OBJE ...
相关推荐
全文索引是一种特殊类型的索引,不同于传统的 B-tree 结构索引,它通过使用特殊的标记技术和语言分析技术来维护索引。全文索引主要针对的是文本型数据,能够根据特定语言的规则对词汇进行索引,从而实现基于关键字的...
单列索引是最简单的索引类型,它仅包含表中的一个字段。这种类型的索引易于创建和使用,适用于那些频繁查询单一字段的情况。 例如,为了提高基于用户ID的查询效率,可以在`ds_order`表中为`user_id`字段创建索引。 ...
4. **简化查询**:使用合适的索引可以让查询更加简单高效。 5. **支持高效的连接操作**:通过索引来优化表之间的连接操作。 6. **减少使用全表扫描**:在大多数情况下,索引能避免执行全表扫描,从而显著提高效率。 ...
《histcite:文献索引分析利器及使用指南》 histcite是一款专为科研工作者设计的文献索引分析软件,尤其适合硕士研究生、博士生以及大学教师等人群使用。这款工具的强大之处在于,它能帮助用户通过输入关键词快速...
2. **合理使用组合索引:** 组合索引(如`(C1, C2)`)允许查询利用多个列进行筛选。例如,查询`SELECT * FROM T1 WHERE C1 = 1 AND C2 = 2`可以使用组合索引`IT1C1C2(C1, C2)`。需要注意的是,组合索引的顺序非常...
以下是一个简单的Python FTP查找示例,使用`ftplib`库查找特定文件: ```python import ftplib def find_file_in_ftp(host, username, password, filename): try: ftp = ftplib.FTP(host) ftp.login(username, ...
Python以其强大的数据处理库,如pandas,使得自动化处理Excel文件变得简单高效。这个压缩包文件包含了一个具体的例子,展示了如何根据特定条件筛选Excel数据,并将筛选结果存入新的工作表。 首先,我们需要导入...
4. **复合索引**:如果一个查询涉及多个列,可以考虑创建复合索引,将最常用于筛选的列放在前面。 另外,还要注意避免在索引列上使用不等运算符、函数或计算表达式,这可能会导致索引失效。同时,合理使用覆盖索引...
在数据库管理和优化领域,索引的合理设计与使用对于提高查询性能具有至关重要的作用。本文将基于一个具体的示例表`TABLE1`来探讨SQL Server中索引对查询条件的影响,以及如何通过调整查询条件顺序来优化查询效率。 ...
6. **数据处理**:后端需要处理筛选请求,可能需要对数据库进行查询优化,如建立索引、使用JOIN操作等,以提高查询效率。 7. **缓存策略**:为了提升性能,可以缓存用户的筛选结果,当用户再次访问相同的筛选条件时...
在MySQL中,为数据库表的列创建索引可以优化查询性能,尤其对于频繁进行筛选和排序的字段,索引的作用更加显著。 首先,我们来看一个简单的例子。假设我们有一个名为`mytable`的表,包含`id`(主键)、`category_id...
* 倒排索引:TRS架构使用倒排索引来提供高性能的分布式索引服务。 * 正排索引:TRS架构使用正排索引来提供高性能的分布式索引服务。 * 插件化设计:TRS架构使用插件化设计来提供灵活可配的分布式索引服务。 * ...
安装织梦筛选插件的过程相对简单,一般只需将下载的压缩包解压后,将其中的文件上传到织梦系统的相应目录,并在后台进行相应的配置。具体步骤可能包括:登录织梦后台,进入“模块”管理,选择“上传新模块”,然后...
时间复杂度方面,筛选素数法的时间复杂度大约为O(n log log n),远优于简单的质因数分解或试除法,后者的时间复杂度为O(n^1.5)或更高。 总之,筛选素数问题是一个经典的算法问题,通过使用筛选法,我们可以快速有效...
- 而有了ICP之后,MySQL可以直接在存储层(即索引层)对每一行数据进行筛选,只有真正满足所有条件的数据才会被返回给服务器层处理。 ##### 3. 实验演示 为了更好地理解ICP的效果,我们可以通过一个简单的实验来...
这个简单的demo可能没有做过多的封装,但它是学习和理解右侧索引工作原理的好起点。实际项目中,为了代码的可复用性和可维护性,通常会将这部分功能封装到一个自定义的UITableView类别或者扩展中。 在阅读和理解这...
- **代码示例**:创建一个Document对象,填充字段值,然后使用SolrServer.Add方法将其添加到索引;构建SolrQuery,执行Search方法获取结果。 综上所述,"Weiz.Solr"可能是一个类似SolrNet的C#客户端库,用于简化C#...
- 数据库索引的合理设置对提高筛选和排序速度至关重要,尤其是对于经常被搜索的属性,应建立索引以加速查询。 2. 商品筛选: - 用户界面:在前端,需要设计一个类似淘宝的商品筛选面板,让用户可以多选属性进行...