我有一张像:
CREATE TABLE grid_rows(
[grid_row_id] [int] NOT NULL,
[grid_column_id] [smallint] NOT NULL,
[decimal_val] [decimal](18, 6) NULL,
[datetime_val] [datetime] NULL,
[integer_val] [int] NULL,
[string_val] [varchar](1024) NULL
)
Run Code Online (Sandbox Code Playgroud)
这张桌子有一些 1,037,560 rows
exec sp_spaceused "grid_rows" gives:
rows reserved data
1,037,560 461,768KB 302,648KB`
Run Code Online (Sandbox Code Playgroud)
将精度从 (18, 6) 更改为 (24,6) 后即
ALTER TABLE grid_rows ALTER COLUMN decimal_val decimal(24, 6)
exec sp_spaceused "grid_rows" gives:
rows reserved data
1,037,560 641,352KB 560,832KB
Run Code Online (Sandbox Code Playgroud)
根据所分配的空间decimal(18,6)
就是9 bytes
那的(24, 6)
是13 bytes
。MSDN参考
The reserved space has …
我有一个表,其中包含任何对象可以具有的所有属性的列表:
attr_id attr_name attr_data_type ------ ----- --------------
我有一个表[object_key]
,其中每个表object_key_id
都有一个唯一的列表,即一组 attr_id,attr_value 对。
object_key_id attr_id attr_value --------- ------- ---------- 1 1 '值 1' 1 2 '值 2' 2 1 '值 3' 2 2 'value4' 3 1 '值 1' 3 2 '值 2' 3 3 'value3'
在这种情况下,获得object_key_id
给定attr_id,attr_value
对的最佳方法是什么。
Ex: Input: [{1, 'value1'}, {2, 'value2'}]
Output: 1
建立唯一索引的最佳方法是什么,即object_key_id
对一组attr_id,attr_value
对具有唯一性?
<deadlock-list>
<deadlock victim="process14012e08">
<process-list>
<process id="process14012e08" taskpriority="0" logused="148"
waitresource="PAGE: 28:1:762341" waittime="6583"
ownerId="54542271281" transactionname="DELETE"
lasttranstarted="2013-06-22T01:04:20.450" XDES="0x64de49950"
lockMode="S" schedulerid="26" kpid="13336" status="suspended" spid="1239"
sbid="0" ecid="0" priority="0" trancount="2"
lastbatchstarted="2013-06-22T01:00:19.120"
lastbatchcompleted="2013-06-22T01:00:19.117" hostpid="15675"
isolationlevel="read committed (2)" xactid="54542271281" currentdb="28"
lockTimeout="4294967295" clientoption1="671350816" clientoption2="128056">
<executionStack>
<frame procname="adhoc" line="3" stmtstart="134" stmtend="332"
sqlhandle="0x02000000e5eb1a38144fa5c164b3c876cc2c8da059bf3bb1">
delete from grid_col where grid_col_id not in (select grid_col_id from grid)
</frame>
</executionStack>
<inputbuf>
set rowcount 10000
while 1 = 1
begin delete from grid_col where grid_col_id not in (select grid_col_id from grid)
if @@rowcount = 0
break …
Run Code Online (Sandbox Code Playgroud)