日期:2014-05-17 浏览次数:20525 次
--1. 假设有这么一张表:m_table
IF EXISTS ( SELECT * FROM sys.sysobjects WHERE type='u' AND name='m_table')
DROP TABLE m_table
CREATE TABLE m_table
(
id INT IDENTITY(1,1) PRIMARY KEY,
name1 NVARCHAR(10),
name2 NVARCHAR(20),
createtime DATETIME
)
--2. 假设m_table表里的数据已经有100万
--3. 现在有个需求
-----a.每隔1秒向表m_table写一条数据,同时修改表m_table中的另一条数据。
-----b.每隔10秒删除表m_table中的一条数据
--4. 请问如此高频率地操作m_table表后果将是怎样?该如果改进?
--一般查询时加(nolock)则不会出现死锁情况
select * from m_table (nolock)
--更新时加行锁
update m_table WITH (ROWLOCK) set [name]='XXX' where id=1
--这个频率,不算高
--#1.如果此表没有唯一索引,那么每隔1秒向表m_table写一条数据不是问题
--#2.每隔1秒,同时修改表m_table中的另一条数据.这个就要建立相关的索引了.因为只查一条,具有高选择性.建立合适的索引后,问题也不大
--#3.每隔10秒删除表m_table中的一条数据。具有高选择性,问题也不大。
--#4.问题。
--因为你的ID是主键,应该默认也是聚集索引,所以插入数据应该问题不大;
--修改数据的话,3个字段(2个NVARCHAR,1个DATETIME)也不会引起页的太多碎片;
--删除数据的话,会造成一定的索引(聚集和非聚集)碎片,定期在系统空闲的时候,整理即可
--100W数据量的话,也不算很大,如果总数据量增长不是很快。加索引即可