찾다
데이터 베이스MySQL 튜토리얼SQLSERVER中KeyHashValue的作用(下)

SQLSERVER中KeyHashValue的作用(下) 昨天中午跟高文佳童鞋讨论了 KeyHashValue 的作用,到最后还是没有讨论出结果 昨天晚上德国的兄弟傅文伟做了一下实验,将实验结果交给我 感谢他们 SQLSERVER中KeyHashValue的作用(上) 虽然对于keyhashvalue的研究还有

SQLSERVER中KeyHashValue的作用(下)

昨天中午跟高文佳童鞋讨论了KeyHashValue的作用,到最后还是没有讨论出结果

昨天晚上德国的兄弟傅文伟做了一下实验,将实验结果交给我

感谢他们

SQLSERVER中KeyHashValue的作用(上)

虽然对于keyhashvalue的研究还有很多问题还没有解决,但是基本可以确定“keyhashvalue是用来锁定资源的”

而不是我之前说的,在seek的时候根据这个KeyHashValue来快速查找到对应的记录

误导大家了,真的不好意思!!!!

资源                                            说明
RID                             用于锁定堆(heap)中的某一行
KEY                              用于锁定索引上的某一行,或者某个索引键
PAGE                            锁定数据库中的一个8KB页,例如数据页或索引页
EXTENT                        一组连续的8页(区)
HOBT                           锁定整个堆或B树的锁
TABLE                          锁定包括所有数据和索引的整个表
FILE                                   数据库文件
APPLICATION                应用程序专用的资源
METADATA                        元数据锁
ALLOCATION_UNIT             分配单元
DATABASE                     整个数据库

 

KEY是靠生成的这个KeyHashValue来进行锁定索引中的行

KEY                              用于锁定索引上的某一行

 

为什么需要这个KeyHashValue???

由于很苟很苟没有写C#代码,不过我觉得从C#的多线程同步来理解会更加好

例如:

lock 语句    lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代

码,则它将一直等待(即被阻止),直到该对象被释放,大家可以把同步对象理解为KeyHashValue

 c# 多线程同步

 c# 多线程同步

大家还是看给出的文章链接吧,因为本人很苟很苟没有写C#代码了,细节的东西看文章比较好

 

 

网上有很多相关的文章:

例如

建立索引的时候为什麽有900bytes的限制

为了性能,不可能让您在比较大的数据类型下,而且存储了非常多的数据的字段上建立索引

因为这样做的话,要计算出KeyHashValue就会非常消耗性能

这篇文章:Improvement in minimizing lockhash key collisions in SQL Server 2008R2 and its impact on concurrency

Since the key to a row could be as large as 900 bytes, using the real key values would have inflicted larger memory consumption.

引入

The solution to this problem was found when designing SQL server 7.0 in 1996 and 1997 by using the key of the row and apply

a hash algorithm to it which then results in a 6 byte long lockhash value 

 

我将这些文章整理到我的文章里:undocumented virtual column  %%lockres%%

 

在SQLSERVER2005下跟SQLSERVER2012下,建立相同的聚集索引,你会看到在SQL2005下,表的聚集索引页面有KeyHashValue

但是在SQL2012下,表的聚集索引页面的KeyHashValue列全部为NULL

由于我没有SQL2008,所以没有测试SQL2008,估计从SQL2008开始,KeyHashValue开始有些变化了

在SQL2005里,你使用dbcc page查看数据页面,数据页面里的每行记录是没有显示KeyHashValue的,不知道要打开哪个跟踪标记才能看到

在SQL2005里唯一能看到数据页面中的keyhashvalue只有使用%%lockres%%

 

而在SQL2012,不用做任何设置,使用dbcc page就可以看到KeyHashValue

当然也可以用%%lockres%%:

<span>1</span> <span>SELECT</span>   <span>%%</span>lockres<span>%%</span> <span>AS</span> <span>'</span><span>数据页的keyhashvalue</span><span>'</span> <span>FROM</span>  表名

页面126是数据页面

<span>1</span> <span>DBCC</span> TRACEON(<span>3604</span>,<span>-</span><span>1</span><span>)
</span><span>2</span> <span>GO</span>
<span>3</span> <span>DBCC</span> PAGE(testhashkey,<span>1</span>,<span>126</span>,<span>3</span><span>) 
</span><span>4</span> <span>GO</span>

Slot 0 Offset 0x0 Length 0 Length (physical) 0

KeyHashValue = (8194443284a0)      

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

 

SQL2012最大的改进是提示非常清晰,而且以前的SQLSERVER版本没有显示出来的东西都给你显示出来了,

这样有时候就不用做那么多系统表的表连接,如果是以前版本的SQLSERVER要查看某一个信息的时候又要做

这个系统表的表连接又要做那个表的表连接才能得出这个自己想看的东西,非常繁琐

 

例如如下改进:

聚集索引页面的显示,SQL2005是没有Row Size这一列的

SQLSERVER中KeyHashValue的作用(下)

下面的所有测试都是基于SQLSERVER2005 SP4 个人开发版


聚集索引

创建聚集索引的时候无论是唯一还是不唯一都会产生KeyHashValue

但是为了实验的方便,我这里只创建唯一聚集索引,因为不唯一的话会产生range locks不方便查看结果

详细请参考文章:Range locks

脚本:

SQLSERVER中KeyHashValue的作用(下)SQLSERVER中KeyHashValue的作用(下)

<span> 1</span> <span>USE</span><span> master
</span><span> 2</span> <span>GO</span>
<span> 3</span> <span>CREATE</span> <span>DATABASE</span><span> testhashkey
</span><span> 4</span> <span>GO</span>
<span> 5</span> 
<span> 6</span> <span>USE</span><span> testhashkey
</span><span> 7</span> <span>GO</span>
<span> 8</span> 
<span> 9</span> <span>--</span><span>------------------------------------------</span>
<span>10</span> <span>--</span><span>测试聚集索引</span>
<span>11</span> <span>CREATE</span> <span>TABLE</span><span> testcluster
</span><span>12</span> <span>    (
</span><span>13</span>       a <span>NVARCHAR</span>(<span>3800</span>) <span>NOT</span> <span>NULL</span><span> ,
</span><span>14</span>       b <span>INT</span> <span>NOT</span> <span>NULL</span>
<span>15</span> <span>    )
</span><span>16</span> <span>GO</span>
<span>17</span> 
<span>18</span> <span>--</span><span>这里一定要是唯一的</span>
<span>19</span> <span>CREATE</span> <span>UNIQUE</span>  <span>CLUSTERED</span> <span>INDEX</span> ucl <span>ON</span><span> testcluster(b)
</span><span>20</span> <span>GO</span>
<span>21</span> 
<span>22</span> <span>INSERT</span><span>  testcluster
</span><span>23</span> <span>SELECT</span>  <span>CAST</span>(<span>11</span> <span>AS</span> <span>VARCHAR</span>(<span>10</span>))<span>+</span><span>replicate</span>(<span>'</span><span>a</span><span>'</span>, <span>3500</span>),<span>1</span> <span>UNION</span> <span>ALL</span>
<span>24</span> <span>SELECT</span>  <span>CAST</span>(<span>22</span> <span>AS</span> <span>VARCHAR</span>(<span>10</span>))<span>+</span><span>replicate</span>(<span>'</span><span>a</span><span>'</span>, <span>3500</span>),<span>2</span>
View Code

查看表情况的脚本

SQLSERVER中KeyHashValue的作用(下)SQLSERVER中KeyHashValue的作用(下)

<span> 1</span> <span>CREATE</span> <span>TABLE</span><span> DBCCResult (
</span><span> 2</span> PageFID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span> 3</span> PagePID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span> 4</span> IAMFID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span> 5</span> IAMPID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span> 6</span> ObjectID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span> 7</span> IndexID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span> 8</span> PartitionNumber <span>NVARCHAR</span>(<span>200</span><span>),
</span><span> 9</span> PartitionID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>10</span> iam_chain_type <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>11</span> PageType <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>12</span> IndexLevel <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>13</span> NextPageFID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>14</span> NextPagePID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>15</span> PrevPageFID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>16</span> PrevPagePID <span>NVARCHAR</span>(<span>200</span><span>)
</span><span>17</span> <span>)
</span><span>18</span> 
<span>19</span> <span>TRUNCATE</span> <span>TABLE</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>DBCCResult</span><span>]</span>
<span>20</span> 
<span>21</span> <span>INSERT</span> <span>INTO</span> DBCCResult <span>EXEC</span> (<span>'</span><span>DBCC IND(testhashkey,testcluster,-1) </span><span>'</span><span>)
</span><span>22</span> 
<span>23</span> <span>SELECT</span> <span>*</span> <span>FROM</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>DBCCResult</span><span>]</span> <span>ORDER</span> <span>BY</span> <span>[</span><span>PageType</span><span>]</span> <span>DESC</span> 
View Code

SQLSERVER中KeyHashValue的作用(下)

聚集索引页面
SQLSERVER中KeyHashValue的作用(下)

其实我这里暂时还不清楚聚集索引页面的KeyHashValue有什么作用,为什麽这样说??请往下看

 

我们看一下表中的每行记录的所产生的keyhashvalue

<span>1</span> <span>select</span> <span>%%</span>lockres<span>%%</span> <span>AS</span> <span>'</span><span>数据页的keyhashvalue</span><span>'</span> <span>from</span> testcluster

SQLSERVER中KeyHashValue的作用(下)

大家可以看到,无论是索引行还是数据行都有KeyHashValue

 

我们使用下面语句进行测试,查看SQLSERVER锁定的资源

SQLSERVER中KeyHashValue的作用(下)SQLSERVER中KeyHashValue的作用(下)

<span> 1</span> <span>SET</span> <span>TRANSACTION</span> <span>ISOLATION</span> <span>LEVEL</span> <span>SERIALIZABLE</span>
<span> 2</span> <span>GO</span>
<span> 3</span> <span>BEGIN</span> <span>TRANSACTION</span>
<span> 4</span> <span>SELECT</span> b <span>FROM</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>testcluster</span><span>]</span> <span>WHERE</span> <span>[</span><span>b</span><span>]</span><span>=</span><span>1</span>
<span> 5</span> <span>--</span><span>COMMIT TRAN</span>
<span> 6</span> 
<span> 7</span> <span>SELECT</span><span>  resource_type ,
</span><span> 8</span> <span>        resource_database_id ,
</span><span> 9</span> <span>        resource_description ,
</span><span>10</span> <span>        resource_associated_entity_id ,
</span><span>11</span> <span>        request_mode ,
</span><span>12</span> <span>        request_type ,
</span><span>13</span> <span>        request_status
</span><span>14</span> <span>FROM</span><span>    sys.dm_tran_locks
</span><span>15</span> <span>WHERE</span>   <span>[</span><span>resource_database_id</span><span>]</span><span>=</span><span>DB_ID</span>(<span>'</span><span>testhashkey</span><span>'</span><span>)
</span><span>16</span> <span>ORDER</span> <span>BY</span> <span>[</span><span>resource_type</span><span>]</span>
View Code

SQLSERVER中KeyHashValue的作用(下)

 SQLSERVER中KeyHashValue的作用(下)

SQLSERVER中KeyHashValue的作用(下)

 

 

 

为什麽我刚才说:不清楚聚集索引页面的KeyHashValue有什么作用???

大家可以用下面的脚本来测试一下,无论我select还是update,DepartmentID BETWEEN 0 AND 122之间

使用sys.dm_tran_locks视图来查询,发现resource_description字段都没有显示聚集索引页面的keyhashvalue,只显示数据页面

的keyhashvalue,说明我在select和update的时候没有用到聚集索引页面的keyhashvalue,这里我不知道在什么情况下会用到

聚集索引页面的KeyHashValue

脚本如下:

SQLSERVER中KeyHashValue的作用(下)SQLSERVER中KeyHashValue的作用(下)

<span> 1</span> <span>USE</span><span> master
</span><span> 2</span> <span>GO</span>
<span> 3</span> <span>CREATE</span> <span>DATABASE</span><span> practice
</span><span> 4</span> <span>GO</span>
<span> 5</span> 
<span> 6</span> <span>USE</span><span> practice
</span><span> 7</span> <span>GO</span>
<span> 8</span> 
<span> 9</span> <span>--</span><span>只有聚集索引</span>
<span>10</span> <span>CREATE</span> <span>TABLE</span><span> Department(
</span><span>11</span>     DepartmentID <span>int</span> <span>IDENTITY</span>(<span>1</span>,<span>1</span>) <span>NOT</span> <span>NULL</span> <span>PRIMARY</span> <span>KEY</span><span>,
</span><span>12</span>     Name <span>NVARCHAR</span>(<span>200</span>) <span>NOT</span> <span>NULL</span><span>,
</span><span>13</span>     GroupName <span>NVARCHAR</span>(<span>200</span>) <span>NOT</span> <span>NULL</span><span>,
</span><span>14</span>     Company <span>NVARCHAR</span>(<span>300</span><span>),
</span><span>15</span>     ModifiedDate <span>datetime</span> <span>NOT</span> <span>NULL</span>  <span>DEFAULT</span> (<span>getdate</span><span>())
</span><span>16</span> <span>)
</span><span>17</span> 
<span>18</span> <span>INSERT</span> <span>INTO</span> Department(name,<span>[</span><span>Company</span><span>]</span>,groupname) <span>VALUES</span>(<span>'</span><span>销售部</span><span>'</span>,<span>'</span><span>中国你好有限公司XX分公司</span><span>'</span>,<span>'</span><span>销售组</span><span>'</span><span>)
</span><span>19</span> <span>GO</span> <span>100000</span>
<span>20</span> 
<span>21</span> <span>CREATE</span> <span>TABLE</span><span> DBCCResult (
</span><span>22</span> PageFID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>23</span> PagePID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>24</span> IAMFID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>25</span> IAMPID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>26</span> ObjectID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>27</span> IndexID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>28</span> PartitionNumber <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>29</span> PartitionID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>30</span> iam_chain_type <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>31</span> PageType <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>32</span> IndexLevel <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>33</span> NextPageFID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>34</span> NextPagePID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>35</span> PrevPageFID <span>NVARCHAR</span>(<span>200</span><span>),
</span><span>36</span> PrevPagePID <span>NVARCHAR</span>(<span>200</span><span>)
</span><span>37</span> <span>)
</span><span>38</span> 
<span>39</span> <span>TRUNCATE</span> <span>TABLE</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>DBCCResult</span><span>]</span>
<span>40</span> 
<span>41</span> <span>INSERT</span> <span>INTO</span> DBCCResult <span>EXEC</span> (<span>'</span><span>DBCC IND(practice,Department,-1) </span><span>'</span><span>)
</span><span>42</span> 
<span>43</span> <span>SELECT</span> <span>*</span> <span>FROM</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>DBCCResult</span><span>]</span> <span>ORDER</span> <span>BY</span> <span>[</span><span>PageType</span><span>]</span> <span>DESC</span> 
<span>44</span> 
<span>45</span> <span>DBCC</span> TRACEON(<span>3604</span>,<span>-</span><span>1</span><span>)
</span><span>46</span> <span>GO</span>
<span>47</span> <span>DBCC</span> PAGE(practice,<span>1</span>,<span>114</span>,<span>3</span><span>) 
</span><span>48</span> <span>GO</span>
<span>49</span> 
<span>50</span> <span>select</span> <span>%%</span>lockres<span>%%</span> <span>AS</span> <span>'</span><span>数据页的keyhashvalue</span><span>'</span> <span>from</span><span> Department
</span><span>51</span> 
<span>52</span> 
<span>53</span> 
<span>54</span> 
<span>55</span> 
<span>56</span> 
<span>57</span> <span>SET</span> <span>TRANSACTION</span> <span>ISOLATION</span> <span>LEVEL</span> <span>SERIALIZABLE</span>
<span>58</span> <span>GO</span>
<span>59</span> <span>BEGIN</span> <span>TRANSACTION</span>
<span>60</span> <span>SELECT</span> DepartmentID <span>FROM</span> Department <span>WHERE</span> DepartmentID <span>BETWEEN</span> <span>0</span> <span>AND</span> <span>122</span> 
<span>61</span> <span>--</span><span>COMMIT TRAN</span>
<span>62</span> 
<span>63</span> <span>SELECT</span><span>  resource_type ,
</span><span>64</span> <span>        resource_database_id ,
</span><span>65</span> <span>        resource_description ,
</span><span>66</span> <span>        resource_associated_entity_id ,
</span><span>67</span> <span>        request_mode ,
</span><span>68</span> <span>        request_type ,
</span><span>69</span> <span>        request_status
</span><span>70</span> <span>FROM</span><span>    sys.dm_tran_locks
</span><span>71</span> <span>WHERE</span>   <span>[</span><span>resource_database_id</span><span>]</span><span>=</span><span>DB_ID</span>(<span>'</span><span>practice</span><span>'</span><span>) 
</span><span>72</span> <span>AND</span> <span>[</span><span>resource_description</span><span>]</span> <span>LIKE</span> <span>'</span><span>%b03b%</span><span>'</span>
<span>73</span> <span>ORDER</span> <span>BY</span> <span>[</span><span>resource_type</span><span>]</span>
View Code


我做了一个大胆的假设:其实聚集索引页面的keyhashvalue是没有用的!!!

原因一:

如果把刚才的脚本在SQL2012下运行,你会发现聚集索引的KeyHashValue列全部为NULL

SQLSERVER中KeyHashValue的作用(下)

SQLSERVER中KeyHashValue的作用(下)

原因二:

就是我上面的测试脚本,无论我select还是update,DepartmentID BETWEEN 0 AND 122之间

使用sys.dm_tran_locks视图来查询,发现resource_description字段都没有显示聚集索引页面的keyhashvalue,只显示数据页面

KeyHashValue

原因三:

就是昨天跟高文佳童鞋讨论的时候,他也发现了有时候在聚集索引里也会看到KeyHashValue列全部为NULL

我之前在SQLSERVER2005下也测试过,确实是这样

SQLSERVER中KeyHashValue的作用(上)

SQLSERVER中KeyHashValue的作用(下)

原因四:

可能为了不改动代码,原先SQLSERVER团队设计的时候只需要非聚集索引有KeyHashValue就可以了,而聚集索引不需要KeyHashValue

但是如果是这样,为了减少改动,不写两套代码,或者为了某种兼容性(与前面版本兼容),而不删除聚集索引的KeyHashValue

 


非聚集索引

非聚集索引表的非聚集索引页有KeyHashValue,但是数据页是没有KeyHashValue

创建非聚集索引,这里我也是指定唯一的

脚本:

SQLSERVER中KeyHashValue的作用(下)SQLSERVER中KeyHashValue的作用(下)

<span> 1</span> <span>--</span><span>测试非聚集索引</span>
<span> 2</span> <span>USE</span> <span>[</span><span>testhashkey</span><span>]</span>
<span> 3</span> <span>GO</span>
<span> 4</span> <span>CREATE</span> <span>TABLE</span><span> testnoncluster
</span><span> 5</span> <span>    (
</span><span> 6</span>       a <span>NVARCHAR</span>(<span>3800</span>) <span>NOT</span> <span>NULL</span><span> ,
</span><span> 7</span>       b <span>INT</span> <span>NOT</span> <span>NULL</span>
<span> 8</span> <span>    )
</span><span> 9</span> <span>GO</span>
<span>10</span> 
<span>11</span> <span>CREATE</span> <span>UNIQUE</span> <span>NONCLUSTERED</span> <span>INDEX</span> ucil <span>ON</span><span> testnoncluster(b)
</span><span>12</span> <span>GO</span>
<span>13</span> 
<span>14</span> <span>INSERT</span><span>  testnoncluster
</span><span>15</span> <span>SELECT</span>  <span>CAST</span>(<span>11</span> <span>AS</span> <span>VARCHAR</span>(<span>10</span>))<span>+</span><span>replicate</span>(<span>'</span><span>a</span><span>'</span>, <span>3500</span>),<span>1</span> <span>UNION</span> <span>ALL</span>
<span>16</span> <span>SELECT</span>  <span>CAST</span>(<span>22</span> <span>AS</span> <span>VARCHAR</span>(<span>10</span>))<span>+</span><span>replicate</span>(<span>'</span><span>a</span><span>'</span>, <span>3500</span>),<span>2</span>
<span>17</span> 
<span>18</span> 
<span>19</span> <span>SELECT</span> <span>*</span> <span>FROM</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>testnoncluster</span><span>]</span>
View Code

查看表情况的脚本

SQLSERVER中KeyHashValue的作用(下)SQLSERVER中KeyHashValue的作用(下)

<span> 1</span> <span>TRUNCATE</span> <span>TABLE</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>DBCCResult</span><span>]</span>
<span> 2</span> 
<span> 3</span> <span>INSERT</span> <span>INTO</span> DBCCResult <span>EXEC</span> (<span>'</span><span>DBCC IND(testhashkey,testnoncluster,-1) </span><span>'</span><span>)
</span><span> 4</span> 
<span> 5</span> <span>SELECT</span> <span>*</span> <span>FROM</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>DBCCResult</span><span>]</span> <span>ORDER</span> <span>BY</span> <span>[</span><span>PageType</span><span>]</span> <span>DESC</span> 
<span> 6</span> 
<span> 7</span> <span>DBCC</span> TRACEON(<span>3604</span>,<span>-</span><span>1</span><span>)
</span><span> 8</span> <span>GO</span>
<span> 9</span> <span>DBCC</span> PAGE(testhashkey,<span>1</span>,<span>77</span>,<span>3</span><span>) 
</span><span>10</span> <span>GO</span>
View Code

SQLSERVER中KeyHashValue的作用(下)

非聚集索引页面

SQLSERVER中KeyHashValue的作用(下)

我们看一下表中的每行记录的所产生的keyhashvalue

<span>1</span> <span>select</span> <span>%%</span>lockres<span>%%</span> <span>AS</span> <span>'</span><span>数据页的keyhashvalue</span><span>'</span> <span>from</span> testnoncluster

SQLSERVER中KeyHashValue的作用(下)

大家可以看到,这里只显示了行记录的FID:PID:RID,并没有显示keyhashvalue

 

我们使用下面语句进行测试,查看SQLSERVER锁定的资源

SQLSERVER中KeyHashValue的作用(下)SQLSERVER中KeyHashValue的作用(下)

<span> 1</span> <span>SET</span> <span>TRANSACTION</span> <span>ISOLATION</span> <span>LEVEL</span> <span>SERIALIZABLE</span>
<span> 2</span> <span>GO</span>
<span> 3</span> <span>BEGIN</span> <span>TRANSACTION</span>
<span> 4</span> <span>SELECT</span> b <span>FROM</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>testnoncluster</span><span>]</span> <span>WHERE</span> <span>[</span><span>b</span><span>]</span><span>=</span><span>1</span>
<span> 5</span> <span>--</span><span>COMMIT TRAN</span>
<span> 6</span> 
<span> 7</span> <span>SELECT</span><span>  resource_type ,
</span><span> 8</span> <span>        resource_database_id ,
</span><span> 9</span> <span>        resource_description ,
</span><span>10</span> <span>        resource_associated_entity_id ,
</span><span>11</span> <span>        request_mode ,
</span><span>12</span> <span>        request_type ,
</span><span>13</span> <span>        request_status
</span><span>14</span> <span>FROM</span><span>    sys.dm_tran_locks
</span><span>15</span> <span>WHERE</span>   <span>[</span><span>resource_database_id</span><span>]</span><span>=</span><span>DB_ID</span>(<span>'</span><span>testhashkey</span><span>'</span><span>)
</span><span>16</span> <span>ORDER</span> <span>BY</span> <span>[</span><span>resource_type</span><span>]</span>
View Code

SQLSERVER中KeyHashValue的作用(下)

 SQLSERVER中KeyHashValue的作用(下)

SQLSERVER中KeyHashValue的作用(下) 

 

我们使用下面脚本创建一个非聚集索引表testnoncluster2

SQLSERVER中KeyHashValue的作用(下)SQLSERVER中KeyHashValue的作用(下)

<span> 1</span> <span>--</span><span>测试堆表和非聚集索引表的数据页也有keyhashvalue</span>
<span> 2</span> <span>USE</span> <span>[</span><span>testhashkey</span><span>]</span>
<span> 3</span> <span>GO</span>
<span> 4</span> 
<span> 5</span> 
<span> 6</span> <span>CREATE</span> <span>TABLE</span><span> testnoncluster2
</span><span> 7</span> <span>    (
</span><span> 8</span>       a <span>NVARCHAR</span>(<span>3800</span>) <span>NOT</span> <span>NULL</span><span> ,
</span><span> 9</span>       b <span>INT</span> <span>NOT</span> <span>NULL</span><span>,
</span><span>10</span>       c <span>INT</span> <span>NOT</span> <span>NULL</span> 
<span>11</span> <span>    )
</span><span>12</span> <span>GO</span>
<span>13</span> 
<span>14</span> 
<span>15</span> 
<span>16</span> <span>CREATE</span> <span>UNIQUE</span> <span>NONCLUSTERED</span> <span>INDEX</span> ucil <span>ON</span><span> testnoncluster2(b)
</span><span>17</span> <span>GO</span>
<span>18</span> 
<span>19</span> <span>INSERT</span><span>  testnoncluster2
</span><span>20</span> <span>SELECT</span>  <span>CAST</span>(<span>11</span> <span>AS</span> <span>VARCHAR</span>(<span>10</span>))<span>+</span><span>replicate</span>(<span>'</span><span>a</span><span>'</span>, <span>3500</span>),<span>1</span>,<span>1</span> <span>UNION</span> <span>ALL</span>
<span>21</span> <span>SELECT</span>  <span>CAST</span>(<span>22</span> <span>AS</span> <span>VARCHAR</span>(<span>10</span>))<span>+</span><span>replicate</span>(<span>'</span><span>a</span><span>'</span>, <span>3500</span>),<span>2</span>,<span>2</span>
<span>22</span> 
<span>23</span> 
<span>24</span> 
<span>25</span> <span>SET</span> <span>TRANSACTION</span> <span>ISOLATION</span> <span>LEVEL</span> <span>SERIALIZABLE</span>
<span>26</span> <span>GO</span>
<span>27</span> <span>BEGIN</span> <span>TRANSACTION</span>
<span>28</span> <span>DELETE</span> <span>FROM</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>testnoncluster2</span><span>]</span>  <span>WHERE</span> <span>[</span><span>c</span><span>]</span><span>=</span><span>1</span>
<span>29</span> <span>--</span><span>ROLLBACK TRAN</span>
<span>30</span> 
<span>31</span> <span>SELECT</span><span>  resource_type ,
</span><span>32</span> <span>        resource_database_id ,
</span><span>33</span> <span>        resource_description ,
</span><span>34</span> <span>        resource_associated_entity_id ,
</span><span>35</span> <span>        request_mode ,
</span><span>36</span> <span>        request_type ,
</span><span>37</span> <span>        request_status
</span><span>38</span> <span>FROM</span><span>    sys.dm_tran_locks
</span><span>39</span> <span>WHERE</span>   <span>[</span><span>resource_database_id</span><span>]</span><span>=</span><span>DB_ID</span>(<span>'</span><span>testhashkey</span><span>'</span><span>) 
</span><span>40</span> <span>ORDER</span> <span>BY</span> <span>[</span><span>resource_type</span><span>]</span>
<span>41</span> 
<span>42</span> 
<span>43</span> 
<span>44</span> 
<span>45</span> <span>select</span> <span>%%</span>lockres<span>%%</span> <span>AS</span> <span>'</span><span>数据页的keyhashvalue</span><span>'</span> <span>from</span> testnoncluster2
View Code

这次删除非聚集索引表的一行
SQLSERVER中KeyHashValue的作用(下)

 SQLSERVER中KeyHashValue的作用(下)

 

为了保证我的结论的正确性,我在SQLSERVER2012里也用上面的脚本测试了一下,创建了表testnoncluster2

脚本:

SQLSERVER中KeyHashValue的作用(下)SQLSERVER中KeyHashValue的作用(下)

<span> 1</span> <span>--</span><span>测试堆表和非聚集索引表的数据页也有keyhashvalue</span>
<span> 2</span> <span>USE</span> <span>[</span><span>testhashkey</span><span>]</span>
<span> 3</span> <span>GO</span>
<span> 4</span> 
<span> 5</span> 
<span> 6</span> 
<span> 7</span> <span>CREATE</span> <span>TABLE</span><span> testnoncluster2
</span><span> 8</span> <span>    (
</span><span> 9</span>       a <span>NVARCHAR</span>(<span>3800</span>) <span>NOT</span> <span>NULL</span><span> ,
</span><span>10</span>       b <span>INT</span> <span>NOT</span> <span>NULL</span><span>,
</span><span>11</span>       c <span>INT</span> <span>NOT</span> <span>NULL</span> 
<span>12</span> <span>    )
</span><span>13</span> <span>GO</span>
<span>14</span> 
<span>15</span> 
<span>16</span> 
<span>17</span> <span>CREATE</span> <span>UNIQUE</span> <span>NONCLUSTERED</span> <span>INDEX</span> ucil <span>ON</span><span> testnoncluster2(b)
</span><span>18</span> <span>GO</span>
<span>19</span> 
<span>20</span> <span>INSERT</span><span>  testnoncluster2
</span><span>21</span> <span>SELECT</span>  <span>CAST</span>(<span>11</span> <span>AS</span> <span>VARCHAR</span>(<span>10</span>))<span>+</span><span>replicate</span>(<span>'</span><span>a</span><span>'</span>, <span>3500</span>),<span>1</span>,<span>1</span> <span>UNION</span> <span>ALL</span>
<span>22</span> <span>SELECT</span>  <span>CAST</span>(<span>22</span> <span>AS</span> <span>VARCHAR</span>(<span>10</span>))<span>+</span><span>replicate</span>(<span>'</span><span>a</span><span>'</span>, <span>3500</span>),<span>2</span>,<span>2</span>
<span>23</span> 
<span>24</span> 
<span>25</span> 
<span>26</span> 
<span>27</span> 
<span>28</span> <span>TRUNCATE</span> <span>TABLE</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>DBCCResult</span><span>]</span>
<span>29</span> 
<span>30</span> <span>INSERT</span> <span>INTO</span> DBCCResult <span>EXEC</span> (<span>'</span><span>DBCC IND(testhashkey,testnoncluster2,-1) </span><span>'</span><span>)
</span><span>31</span> 
<span>32</span> <span>SELECT</span> <span>*</span> <span>FROM</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>DBCCResult</span><span>]</span> <span>ORDER</span> <span>BY</span> <span>[</span><span>PageType</span><span>]</span> <span>DESC</span> 
<span>33</span> 
<span>34</span> <span>DBCC</span> TRACEON(<span>3604</span>,<span>-</span><span>1</span><span>)
</span><span>35</span> <span>GO</span>
<span>36</span> <span>DBCC</span> PAGE(testhashkey,<span>1</span>,<span>165</span>,<span>3</span><span>) 
</span><span>37</span> <span>GO</span>
View Code

数据页面165

SQLSERVER中KeyHashValue的作用(下)SQLSERVER中KeyHashValue的作用(下)

<span>  1</span> <span>DBCC</span> 执行完毕。如果 <span>DBCC</span><span> 输出了错误信息,请与系统管理员联系。
</span><span>  2</span> 
<span>  3</span> PAGE: (<span>1</span>:<span>165</span><span>)
</span><span>  4</span> 
<span>  5</span> 
<span>  6</span> <span>BUFFER:
</span><span>  7</span> 
<span>  8</span> 
<span>  9</span> BUF <span>@0x049D10A8</span>
<span> 10</span> 
<span> 11</span> bpage <span>=</span> <span>0x14784000</span>                  bhash <span>=</span> <span>0x00000000</span>                  bpageno <span>=</span> (<span>1</span>:<span>165</span><span>)
</span><span> 12</span> bdbid <span>=</span> <span>7</span>                           breferences <span>=</span> <span>0</span>                     bcputicks <span>=</span> <span>0</span>
<span> 13</span> bsampleCount <span>=</span> <span>0</span>                    bUse1 <span>=</span> <span>23721</span>                       bstat <span>=</span> <span>0xb</span>
<span> 14</span> blog <span>=</span> <span>0xdb215acc</span>                   bnext <span>=</span> <span>0x00000000</span>                  
<span> 15</span> 
<span> 16</span> <span>PAGE HEADER:
</span><span> 17</span> 
<span> 18</span> 
<span> 19</span> Page <span>@0x14784000</span>
<span> 20</span> 
<span> 21</span> m_pageId <span>=</span> (<span>1</span>:<span>165</span>)                  m_headerVersion <span>=</span> <span>1</span>                 m_type <span>=</span> <span>1</span>
<span> 22</span> m_typeFlagBits <span>=</span> <span>0x0</span>                m_level <span>=</span> <span>0</span>                         m_flagBits <span>=</span> <span>0x8000</span>
<span> 23</span> m_objId (AllocUnitId.idObj) <span>=</span> <span>90</span>    m_indexId (AllocUnitId.idInd) <span>=</span> <span>256</span> 
<span> 24</span> Metadata: AllocUnitId <span>=</span> <span>72057594043826176</span>                                
<span> 25</span> Metadata: PartitionId <span>=</span> <span>72057594039238656</span>                                Metadata: IndexId <span>=</span> <span>0</span>
<span> 26</span> Metadata: ObjectId <span>=</span> <span>629577281</span>      m_prevPage <span>=</span> (<span>0</span>:<span>0</span>)                  m_nextPage <span>=</span> (<span>0</span>:<span>0</span><span>)
</span><span> 27</span> pminlen <span>=</span> <span>12</span>                        m_slotCnt <span>=</span> <span>1</span>                       m_freeCnt <span>=</span> <span>1071</span>
<span> 28</span> m_freeData <span>=</span> <span>7119</span>                   m_reservedCnt <span>=</span> <span>0</span>                   m_lsn <span>=</span> (<span>35</span>:<span>211</span>:<span>62</span><span>)
</span><span> 29</span> m_xactReserved <span>=</span> <span>0</span>                  m_xdesId <span>=</span> (<span>0</span>:<span>0</span>)                    m_ghostRecCnt <span>=</span> <span>0</span>
<span> 30</span> m_tornBits <span>=</span> <span>0</span>                      DB Frag ID <span>=</span> <span>1</span>                      
<span> 31</span> 
<span> 32</span> <span>Allocation Status
</span><span> 33</span> 
<span> 34</span> GAM (<span>1</span>:<span>2</span>) <span>=</span> ALLOCATED               SGAM (<span>1</span>:<span>3</span>) <span>=</span><span> ALLOCATED              
</span><span> 35</span> PFS (<span>1</span>:<span>1</span>) <span>=</span> <span>0x63</span> MIXED_EXT ALLOCATED  95_PCT_FULL                        DIFF (<span>1</span>:<span>6</span>) <span>=</span><span> CHANGED
</span><span> 36</span> ML (<span>1</span>:<span>7</span>) <span>=</span> <span>NOT</span><span> MIN_LOGGED           
</span><span> 37</span> 
<span> 38</span> Slot <span>0</span> Offset <span>0x60</span> Length <span>7023</span>
<span> 39</span> 
<span> 40</span> Record Type <span>=</span> PRIMARY_RECORD        Record Attributes <span>=</span><span>  NULL_BITMAP VARIABLE_COLUMNS
</span><span> 41</span> Record Size <span>=</span> <span>7023</span>                  
<span> 42</span> Memory <span>Dump</span> <span>@0x0FB7C060</span>
<span> 43</span> 
<span> 44</span> <span>00000000</span>:   30000c00 <span>01000000</span> <span>01000000</span> <span>03000001</span> 006f1b31  <span>0</span>................o.<span>1</span>
<span> 45</span> <span>00000014</span>:   <span>00310061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span>  .<span>1</span><span>.a.a.a.a.a.a.a.a.a
</span><span> 46</span> <span>00000028</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 47</span> 0000003C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 48</span> <span>00000050</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 49</span> <span>00000064</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 50</span> <span>00000078</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 51</span> 0000008C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 52</span> 000000A0:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 53</span> 000000B4:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 54</span> 000000C8:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 55</span> 000000DC:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 56</span> 000000F0:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 57</span> <span>00000104</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 58</span> <span>00000118</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 59</span> 0000012C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 60</span> <span>00000140</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 61</span> <span>00000154</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 62</span> <span>00000168</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 63</span> 0000017C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 64</span> <span>00000190</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 65</span> 000001A4:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 66</span> 000001B8:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 67</span> 000001CC:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 68</span> 000001E0:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 69</span> 000001F4:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 70</span> <span>00000208</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 71</span> 0000021C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 72</span> <span>00000230</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 73</span> <span>00000244</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 74</span> <span>00000258</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 75</span> 0000026C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 76</span> <span>00000280</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 77</span> <span>00000294</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 78</span> 000002A8:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 79</span> 000002BC:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 80</span> 000002D0:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 81</span> 000002E4:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 82</span> 000002F8:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 83</span> 0000030C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 84</span> <span>00000320</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 85</span> <span>00000334</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 86</span> <span>00000348</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 87</span> 0000035C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 88</span> <span>00000370</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 89</span> <span>00000384</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 90</span> <span>00000398</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 91</span> 000003AC:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 92</span> 000003C0:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 93</span> 000003D4:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 94</span> 000003E8:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 95</span> 000003FC:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 96</span> <span>00000410</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 97</span> <span>00000424</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 98</span> <span>00000438</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span> 99</span> 0000044C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>100</span> <span>00000460</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>101</span> <span>00000474</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>102</span> <span>00000488</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>103</span> 0000049C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>104</span> 000004B0:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>105</span> 000004C4:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>106</span> 000004D8:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>107</span> 000004EC:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>108</span> <span>00000500</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>109</span> <span>00000514</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>110</span> <span>00000528</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>111</span> 0000053C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>112</span> <span>00000550</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>113</span> <span>00000564</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>114</span> <span>00000578</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>115</span> 0000058C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>116</span> 000005A0:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>117</span> 000005B4:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>118</span> 000005C8:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>119</span> 000005DC:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>120</span> 000005F0:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>121</span> <span>00000604</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>122</span> <span>00000618</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>123</span> 0000062C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>124</span> <span>00000640</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>125</span> <span>00000654</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>126</span> <span>00000668</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>127</span> 0000067C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>128</span> <span>00000690</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>129</span> 000006A4:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>130</span> 000006B8:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>131</span> 000006CC:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>132</span> 000006E0:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>133</span> 000006F4:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>134</span> <span>00000708</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>135</span> 0000071C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>136</span> <span>00000730</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>137</span> <span>00000744</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>138</span> <span>00000758</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>139</span> 0000076C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>140</span> <span>00000780</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>141</span> <span>00000794</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>142</span> 000007A8:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>143</span> 000007BC:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>144</span> 000007D0:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>145</span> 000007E4:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>146</span> 000007F8:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>147</span> 0000080C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>148</span> <span>00000820</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>149</span> <span>00000834</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>150</span> <span>00000848</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>151</span> 0000085C:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>152</span> <span>00000870</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>153</span> <span>00000884</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>154</span> <span>00000898</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>155</span> 000008AC:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>156</span> 000008C0:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>157</span> 000008D4:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>158</span> 000008E8:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>159</span> 000008FC:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>160</span> <span>00000910</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>161</span> <span>00000924</span>:   <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span> <span>00610061</span><span>  .a.a.a.a.a.a.a.a.a.a
</span><span>162</span> <span>00000938</span>:   <span>00610061</span> <span>00610061</span>
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
MySQL : 초보자가 마스터하는 필수 기술MySQL : 초보자가 마스터하는 필수 기술Apr 18, 2025 am 12:24 AM

MySQL은 초보자가 데이터베이스 기술을 배우는 데 적합합니다. 1. MySQL 서버 및 클라이언트 도구를 설치하십시오. 2. SELECT와 같은 기본 SQL 쿼리를 이해하십시오. 3. 마스터 데이터 작업 : 데이터를 만들고, 삽입, 업데이트 및 삭제합니다. 4. 고급 기술 배우기 : 하위 쿼리 및 창 함수. 5. 디버깅 및 최적화 : 구문 확인, 인덱스 사용, 선택*을 피하고 제한을 사용하십시오.

MySQL : 구조화 된 데이터 및 관계형 데이터베이스MySQL : 구조화 된 데이터 및 관계형 데이터베이스Apr 18, 2025 am 12:22 AM

MySQL은 테이블 구조 및 SQL 쿼리를 통해 구조화 된 데이터를 효율적으로 관리하고 외래 키를 통해 테이블 ​​간 관계를 구현합니다. 1. 테이블을 만들 때 데이터 형식을 정의하고 입력하십시오. 2. 외래 키를 사용하여 테이블 간의 관계를 설정하십시오. 3. 인덱싱 및 쿼리 최적화를 통해 성능을 향상시킵니다. 4. 데이터 보안 및 성능 최적화를 보장하기 위해 데이터베이스를 정기적으로 백업 및 모니터링합니다.

MySQL : 주요 기능 및 기능이 설명되었습니다MySQL : 주요 기능 및 기능이 설명되었습니다Apr 18, 2025 am 12:17 AM

MySQL은 웹 개발에 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 주요 기능에는 다음이 포함됩니다. 1. 다른 시나리오에 적합한 InnoDB 및 MyISAM과 같은 여러 스토리지 엔진을 지원합니다. 2.로드 밸런싱 및 데이터 백업을 용이하게하기 위해 마스터 슬레이브 복제 기능을 제공합니다. 3. 쿼리 최적화 및 색인 사용을 통해 쿼리 효율성을 향상시킵니다.

SQL의 목적 : MySQL 데이터베이스와 상호 작용합니다SQL의 목적 : MySQL 데이터베이스와 상호 작용합니다Apr 18, 2025 am 12:12 AM

SQL은 MySQL 데이터베이스와 상호 작용하여 데이터 첨가, 삭제, 수정, 검사 및 데이터베이스 설계를 실현하는 데 사용됩니다. 1) SQL은 Select, Insert, Update, Delete 문을 통해 데이터 작업을 수행합니다. 2) 데이터베이스 설계 및 관리에 대한 생성, 변경, 삭제 문을 사용하십시오. 3) 복잡한 쿼리 및 데이터 분석은 SQL을 통해 구현되어 비즈니스 의사 결정 효율성을 향상시킵니다.

초보자를위한 MySQL : 데이터베이스 관리를 시작합니다초보자를위한 MySQL : 데이터베이스 관리를 시작합니다Apr 18, 2025 am 12:10 AM

MySQL의 기본 작업에는 데이터베이스, 테이블 작성 및 SQL을 사용하여 데이터에서 CRUD 작업을 수행하는 것이 포함됩니다. 1. 데이터베이스 생성 : createAbasemy_first_db; 2. 테이블 만들기 : CreateTableBooks (idintauto_incrementprimarykey, titlevarchar (100) notnull, authorvarchar (100) notnull, published_yearint); 3. 데이터 삽입 : InsertIntobooks (Title, Author, Published_year) VA

MySQL의 역할 : 웹 응용 프로그램의 데이터베이스MySQL의 역할 : 웹 응용 프로그램의 데이터베이스Apr 17, 2025 am 12:23 AM

웹 응용 프로그램에서 MySQL의 주요 역할은 데이터를 저장하고 관리하는 것입니다. 1. MySQL은 사용자 정보, 제품 카탈로그, 트랜잭션 레코드 및 기타 데이터를 효율적으로 처리합니다. 2. SQL 쿼리를 통해 개발자는 데이터베이스에서 정보를 추출하여 동적 컨텐츠를 생성 할 수 있습니다. 3.mysql은 클라이언트-서버 모델을 기반으로 작동하여 허용 가능한 쿼리 속도를 보장합니다.

MySQL : 첫 번째 데이터베이스 구축MySQL : 첫 번째 데이터베이스 구축Apr 17, 2025 am 12:22 AM

MySQL 데이터베이스를 구축하는 단계에는 다음이 포함됩니다. 1. 데이터베이스 및 테이블 작성, 2. 데이터 삽입 및 3. 쿼리를 수행하십시오. 먼저 CreateAbase 및 CreateTable 문을 사용하여 데이터베이스 및 테이블을 작성한 다음 InsertInto 문을 사용하여 데이터를 삽입 한 다음 최종적으로 SELECT 문을 사용하여 데이터를 쿼리하십시오.

MySQL : 데이터 저장에 대한 초보자 친화적 인 접근 방식MySQL : 데이터 저장에 대한 초보자 친화적 인 접근 방식Apr 17, 2025 am 12:21 AM

MySQL은 사용하기 쉽고 강력하기 때문에 초보자에게 적합합니다. 1.MySQL은 관계형 데이터베이스이며 CRUD 작업에 SQL을 사용합니다. 2. 설치가 간단하고 루트 사용자 비밀번호를 구성해야합니다. 3. 삽입, 업데이트, 삭제 및 선택하여 데이터 작업을 수행하십시오. 4. Orderby, Where and Join은 복잡한 쿼리에 사용될 수 있습니다. 5. 디버깅은 구문을 확인하고 쿼리를 분석하기 위해 설명을 사용해야합니다. 6. 최적화 제안에는 인덱스 사용, 올바른 데이터 유형 선택 및 우수한 프로그래밍 습관이 포함됩니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.