zoukankan      html  css  js  c++  java
  • TSQL之哈希索引

    T-SQL之哈希索引

    (一)问题提出

    1,当表中一个字段过长时,建立索引就不适合的了,建立索引的一个原则就是索引不能太宽。

    2,对于varchar(max)、nvarchar(max) 和 varbinary(max) 大值数据类型根本就不能建立索引。

    3,对于这个情况怎么办呢?

    4,哈希索引就派上了用场。

    (二)示例代码

     

    -建立测试表
    CREATE TABLE hash_index
      (
         id   INT IDENTITY(1, 1) PRIMARY KEY,
         name VARCHAR(max)
      )
     
    go
    --插入10000测试数据
    WITH cte
         AS (SELECT NUMBER + 1 AS NUMBER
             FROM   master..spt_values a
             WHERE  a.TYPE = 'P'
                    AND NUMBER < 100)
    INSERT INTO hash_index
                (name)
    SELECT Cast(Newid() AS VARCHAR(50)) + Cast(Newid() AS VARCHAR(50)) + Cast(
                  Newid() AS VARCHAR(50)) + Cast(Newid() AS VARCHAR(50)) + Cast(
                  Newid() AS VARCHAR(50)) + Cast(Newid() AS VARCHAR(50)) + Cast(
                  Newid() AS VARCHAR(50))
    FROM   cte a
           CROSS JOIN cte b
     
    go
    --增加计算列
    ALTER TABLE hash_index
      ADD cs_name AS Checksum(name);
     
    go
    --增加索引
    CREATE INDEX idx_name
      ON hash_index(cs_name)
    

     

     

    (三)查询示例

    --查询一表扫描
    SELECT *
    FROM   hash_index
    WHERE  name =
    'C3AA9897-9303-48C9-B2C2-758C0FFE0BB1ABB3F6FB-BC2C-45DF-B40A-E3DA413AD91E1A598E90-31FE-4F54-B468-0D085A191DA37A35782D-B048-4A6B-89CA-00A15FC1467E0235D0F1-A9EA-4908-9531-3D787C7E7AAA2E6DB162-1099-4B3B-BF93-261B87660B1359768A42-F9F7-4107-9D57-BCB91EEF3CD5'
    --查询二哈希索引
    SELECT *
    FROM   hash_index
    WHERE  name =
    'C3AA9897-9303-48C9-B2C2-758C0FFE0BB1ABB3F6FB-BC2C-45DF-B40A-E3DA413AD91E1A598E90-31FE-4F54-B468-0D085A191DA37A35782D-B048-4A6B-89CA-00A15FC1467E0235D0F1-A9EA-4908-9531-3D787C7E7AAA2E6DB162-1099-4B3B-BF93-261B87660B1359768A42-F9F7-4107-9D57-BCB91EEF3CD5'
    AND cs_name = Checksum(
    'C3AA9897-9303-48C9-B2C2-758C0FFE0BB1ABB3F6FB-BC2C-45DF-B40A-E3DA413AD91E1A598E90-31FE-4F54-B468-0D085A191DA37A35782D-B048-4A6B-89CA-00A15FC1467E0235D0F1-A9EA-4908-9531-3D787C7E7AAA2E6DB162-1099-4B3B-BF93-261B87660B1359768A42-F9F7-4107-9D57-BCB91EEF3CD5'
    )  
    

     (四)对比性能消耗
    表 'hash_index'。扫描计数 1,逻辑读取 340 次,物理读取 4 次,预读 133 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'hash_index'。扫描计数 1,逻辑读取 5 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

     

  • 相关阅读:
    SuperSocket 1.4系列文档(16) 在SuperSocket中启用传输层加密(TLS/SSL)
    SuperSocket 1.4系列文档(10) SuperSocket中的日志功能
    UIPageControl实现自定义按钮
    ios 某些代码网址,app打包成ipa
    笔记隐藏状态栏,播放音乐,获取文件路径,nsthread,文件文件夹操作,plist 时间
    使用NSTimer实现倒计时,Iphone幻灯片效果+背景音乐,
    如何让你的iPhone程序支持多语言环境(本地化)
    iPhone电子书toolbar的实现
    iphone界面如何实现下拉列表
    使用NSTimer与iphone的简单动画,实现飘雪效果
  • 原文地址:https://www.cnblogs.com/slade/p/2477032.html
Copyright © 2011-2022 走看看