sqlserver中这样的字段用啥索引比较好?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver中这样的字段用啥索引比较好?相关的知识,希望对你有一定的参考价值。

比如有一千条数据
然后这一千条数据分配到5个用户名下,有个字段为"username"
这个"username"的字段用什么索引比较好?
聚集索引还是非聚集索引啊?
还有索引的字段可以为空吗?
我可能有些没说清楚我只是打个比方。。
也有可能是几万条数据和40个用户。。
还有这张表里没有插入操作了,只有更新操作

1、关于索引:数据量不是特别大的情况下,建议不要用索引。因为索引本身也是一种数据,随着数据的变化,系统也需要维护索引的变动,这需要开销。不仅仅是空间上的开销,还有处理时间的开销。根据经验,在SQL Server类型的数据表上,如果数据只有几万条,不建索引,让系统全表扫描,并不会比有索引慢多少,有时甚至更快。
2、索引的类别:索引有唯一索引和非唯一索引,还有你说的聚集与非聚集。唯一索引顾名思义,就是该索引字段所有的值不能重复。对于非唯一索引,允许索引字段为空。想来聚集的意思你也是懂的了。在一个表上,只能有一个聚集索引。一般聚集索引建立在主键上比较好。根据经验,聚集对数据访问性能的改善很有限,考虑到聚集对数据变动的性能影响,有时候不建聚集索引,使用唯一索引是非常不错的选择。
3、关于你这个表,要看username是个什么属性的字段。根据上述,如果你的数据只有几千条,没必要在这个字段上使用索引。如果数据量上十万,且是唯一值,最多建一个唯一索引即可。可以自己观察一下,有索引、与没有的时候,性能究竟如何。
参考技术A 聚集索引是唯一的
SQLSERVER 表中 建立 主键默认会生成聚集索引
看你的描述 如果此表查询,主要条件是username
那么可以建立非聚集索引
非聚集索引 也不是强求的 字段是不能为空的,你用IDE去修改下,会提示你索引必需有列
SQL05版本
先CLTR+M 打开执行计划显示
SELECT * FROM 表 WHERE username='test'

如果建立的索引,如果不是按索引来扫描,可能数据量太少,SQLSERVER自动优化选择了不按索引
你也可以强制索引扫描
SELECT *
FROM 表 WITH (INDEX=索引名称)
建立索引 对查询有提升性能 影响插入数据性能
希望对你有帮助
参考技术B 分配语句到username下 跟你在username下用不用索引没关系。。
单纯从分配的操作来说,不在username上加索引最好,因为有了索引还要在插入操作的时候进行索引维护。。。

至于加聚集索引还是非聚集索引,因为你只有5个username 所以数据选择性很差,不用加。

另外索引字段可以为null,但是聚集索引字段最好不要为null...
参考技术C sqlserver一般使用重复资料尽量少的字段建索引。
比如字段A无重复值,而字段B有较多重复值,则使用A建索引,除非查询是根据B查询。
如果字段A和B都无重复值,但A是数据类型,B是字符或其他类型,则使用A建索引。
建了索引后,可以加快数据的查询,但对资料插入的效率会稍有影响,索引建的越多影响越大,所以需要有个取舍,并不是索引建的越多越好。
对于资料比较少的表,则没必要建索引,有时候建了所以查询速度反而不如不建索引。
参考技术D 聚集索引是为一的,且不能为空

winsock广播用啥协议比较好

winsock广播用什么协议比较好,我现在做一个累似飞鸽传书的软件,就是程序启动后就可进行监听局域网内的其他用户,一旦有用户登录就进行连接。我现在在用VB设计,最好能够提供相关思路,有代码更好。
提供详细一点具体怎么做监听及信息收发,就是怎么建立关联。

Winsock 控件对用户来说是不可见的,它提供了访问 TCP 和 UDP 网络服务的方便途径。Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的开发人员都可使用它。为编写客户或服务器应用程序,不必了解 TCP 的细节或调用低级的 Winsock APIs。通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。

TCP 基础

数据传输协议允许创建和维护与远程计算机的连接。连接两台计算机就可彼此进行数据传输。

如果创建客户应用程序,就必须知道服务器计算机名或者 IP 地址(RemoteHost 属性),还要知道进行“侦听”的端口(RemotePort 属性),然后调用 Connect 方法。

如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调用 Listen 方法。当客户计算机需要连接时就会发生 ConnectionRequest 事件。为了完成连接,可调用 ConnectionRequest 事件内的 Accept 方法。

建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用 SendData 方法。当接收数据时会发生 DataArrival 事件。调用 DataArrival 事件内的 GetData 方法就可获取数据。

UDP 基础

用户数据文报协议 (UDP) 是一个无连接协议。跟 TCP 的操作不同,计算机并不建立连接。另外 UDP 应用程序可以是客户机,也可以是服务器。

为了传输数据,首先要设置客户计算机的 LocalPort 属性。然后,服务器计算机只需将 RemoteHost 设置为客户计算机的 Internet 地址,并将 RemotePort 属性设置为跟客户计算机的 LocalPort 属性相同的端口,并调用 SendData 方法来着手发送信息。于是,客户计算机使用 DataArrival 事件内的 GetData 方法来获取已发送的信息。
自己看吧,建议你下载个MSDN,里面内容很全
参考技术A TCP 参考技术B TCP

以上是关于sqlserver中这样的字段用啥索引比较好?的主要内容,如果未能解决你的问题,请参考以下文章

sql server 货币 字段 类型 一般用啥类型?

做开发的朋友们,SqlServer大家都用啥版本

SQL server 2005如何设置一个或几个字段唯一约束?

sqlserver 索引

sql语句中要查询ID字段内容最大的记录怎么查询

大数据分析用啥工具好