zoukankan      html  css  js  c++  java
  • 突破索引长度限制


    --Descript:利用CHECKSUM建立索引


    USE tempdb ;
    GO
     --DROP TABLE dbo.T
    CREATE TABLE dbo.T
        (
          ID INT PRIMARY KEY
                 IDENTITY(1, 1) ,
          [Name] NVARCHAR(MAX)
        ) ;

    --这里我偷懒一下,自己注意在IDE中,关闭,不要插入太多了.哈
    WHILE 1 = 1
        INSERT  INTO dbo.T
                SELECT  CAST(NEWID() AS NVARCHAR(36))
               
    SELECT  *
    FROM    dbo.T

    --表 'T'。扫描计数 1,逻辑读取 5059 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    --SQL Server 执行时间:
    -- CPU 时间 = 922 毫秒,占用时间 = 918 毫秒。
    SET STATISTICS IO ON
    SET STATISTICS TIME ON
    SELECT  *
    FROM    dbo.T
    WHERE   [Name] = '0A1691D4-96B3-481E-9D97-FBC85B94BB03'
    SET STATISTICS TIME OFF
    SET STATISTICS IO OFF

    --消息 1919,级别 16,状态 1,第 1 行
    --表 'dbo.T' 中的列 'Name' 的类型不能用作索引中的键列。一些大数据类型列还没发建立索引呢.怎么搞呢?
    CREATE INDEX [IX_T_Name] ON dbo.T(Name) ;


    --难道我们必须要表(聚集索引)扫描吗或者非全文索引,我们可以使用CHECKSUM 来做

    ALTER TABLE dbo.T ADD Name_Idx AS (CHECKSUM(Name))

    CREATE INDEX [IX_T_Name] ON dbo.T(Name_Idx)

    --表 'T'。扫描计数 1,逻辑读取 6 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    --SQL Server 执行时间:
    --CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
    SET STATISTICS IO ON
    SET STATISTICS TIME ON
    SELECT  *
    FROM    dbo.T
    WHERE   CHECKSUM('0A1691D4-96B3-481E-9D97-FBC85B94BB03') = Name_Idx
    SET STATISTICS TIME OFF
    SET STATISTICS IO OFF

    --上述也只是出苗粗描了一下,建立索引的话,是不能超过900字节的字段的.

  • 相关阅读:
    mysql忘记root密码解决办法
    laravel 获取所有表名
    跳转/传值(从页面到php文件)
    smarty foreach
    radio单选框
    dedecms实例化对象
    file_get_contents()
    if($a)
    bug解决思路
    git查看远程仓库地址
  • 原文地址:https://www.cnblogs.com/qanholas/p/2461176.html
Copyright © 2011-2022 走看看