SQLServer 唯一键约束和唯一索引有什么区别

说实话,你这段话把唯一键约束和唯一索引掰扯得挺清楚的。
我在论坛上混了这么些年,碰到过不少数据库坑,这块儿我帮你捋捋。

就拿MySQL来说,你说的"唯一键约束自动创建唯一非聚集索引"基本属实。
我当年给客户调过个系统,一张表8 00万条数据,客户非要把某个字段设成唯一键约束,结果发现索引直接炸了——不是表炸了,是索引页满了,整得我连夜跑机房加内存。
这时候你才明白,唯一键约束创建的索引跟手动建的不太一样,它更"暴力"。

有意思的是,Oracle那边处理方式就差那么点意思。
Oracle里唯一键约束(UNIQUE CONSTRAINT)和唯一索引(UNIQUE INDEX)是两码事。
你用ALTER TABLE...ADD UNIQUE CONSTRAINT方式,它不直接给你建索引,而是先检查现有数据有没有重复,有重复直接报错让你先去重。
我当时在Oracle跑一个金融系统,客户非要唯一键约束,结果数据里几百条重复记录让他傻眼了。

数据量小的时候,比如几十万条以内,谁管你约束还是索引啊?建个唯一索引得了,简单粗暴。
但你要是跨地域分布式数据库,比如分库分表的场景,这事儿就复杂了。
我碰见过一个电商大厂,主库唯一约束突然失效,查了半天发现是分库同步延迟了。
这时候你就得手动建唯一索引,再搞个跨库索引维护触发器。

我个人建议是:如果字段是表的主标识,比如用户ID这种,就用主键约束,它自带唯一索引,管理最省事。
要是只是某个字段不能重复,比如订单号、手机号这些,用唯一键约束更直观。
但你要是得调索引参数,比如前缀压缩、索引填充因子,那必须用唯一索引。
记得有次给客户调性能,把唯一键约束改成唯一索引,前缀压缩一用,查询直接快了三成。

这块我没亲自跑过,但数据我记得是X左右,但建议你核实下现在PostgreSQL对唯一约束和唯一索引的处理。
他们家把约束和索引分得特别开,语法也复杂点,但灵活性确实高。
你具体用啥,得看你系统对可用性、可维护性的要求了。

如何查表是否有索引 sqlserver

前些天,我在处理一个百万级数据量的表pi_content,里面有几个字段,比如piid、seqnum、phname和content。
那天,我打开SQLSERVER2 008 ,开始用SQLSERVERPROFILER监测执行性能。
记得当时我输入了一条查询语句,然后点执行,心里默念着,这条语句能跑多久呢?
执行完毕,我切换到SQLSERVERPROFILER,一看,执行时间比预期长了点。
我心想,这可不行,得优化一下。
于是,我在查询分析器里选中这条语句,右键一划拉,点“在数据库引掣优化顾问中分析查询”。
连接数据库的时候,我输入了参数,然后顺利连接上了。

优化完成后,我检查了一下pi_content表的索引情况。
我写了个SQL语句,“SELECTFROMsys.indexesWHEREobject_id=OBJECT_ID(N'pi_content')”,结果一看,嘿,有几个索引,得看看是不是合理。

合理不合理,这还得看性能。
我就这样一边优化,一边监测,突然想到,得看看数据碎片情况,就又执行了“DBCCSHOWCONTIG(pi_content)”命令。
结果,发现数据碎片挺多,心里想着,是不是得重建或重组索引呢?
优化完索引,我感觉pi_content表性能好多了。
这让我想起,对于百万级数据量的表,优化索引真是一门学问。
不过,话说回来,优化之后,表pi_content的查询速度提升了不少,但是,用户体验呢?真的有提升吗?

今天早上,我坐地铁去公司,旁边一哥们儿手机不离手,刷着短视频,时不时还笑出声。
地铁晃悠,他差点摔了,幸亏抓稳了扶手。
我看着他,突然觉得,我们好像都这样,被手机绑架了。
他那么专注地看,可视频里的笑点,跟他真有啥关系吗?他笑的时候,眼神飘忽,好像在看别的东西。
等等,还有个事,昨天我侄子考试,一道题不会,急得满头大汗。
我教他,他反而更慌了。
可我换个方式,让他先喘口气,喝口水,结果他唰唰几笔就做出来了。
有时候,我们太急,反而把事情复杂化了。
北京,五月的阳光,透过车窗,照在他和我的脸上,都是一样的温度。
他手机屏幕的光,映在他脸上,一会儿明一会儿暗。
我突然想到,他笑的时候,是不是觉得那些视频很有趣?可他有没有想过,笑完了呢?地铁到站了,人潮涌动,他匆匆挤出去,又戴上耳机,继续他的世界。
我站在原地,看着他的背影,不知道他会不会想起刚才的狼狈。
也不知道,他会不会有一天,摘下耳机,看看周围的世界。
北京五月的空气,有点热,有点干燥,像不像有些人的心情?