10万条记录,求优化方案

shsyzl007 2016-06-18 11:29:32
数据库每个品种存最新的500条数据,这些数据每隔几秒就会更新一次



查询一个品种耗时有的甚至接近1秒,把每个品种存到单独一个数据表效果会好些吗?这些数据要不停的遍历每个品种不停的读,要求延迟越小越好


发现速度不太稳定啊,差别很大

读数据表的代码
 static DataView getdv(string SQLText)
{
string strconn = System.Configuration.ConfigurationManager.AppSettings["kdatastrconn"];


SqlConnection conn = new SqlConnection(strconn);
conn.Open();
SqlCommand mCommand = new SqlCommand(SQLText, conn);
mCommand.CommandType = CommandType.Text;
mCommand.CommandText = SQLText;
mCommand.CommandTimeout = 3600;
SqlDataAdapter adapter = new SqlDataAdapter();
DataSet ds = new DataSet();

adapter.SelectCommand = mCommand;
adapter.Fill(ds, "t1");
conn.Close();
return ds.Tables[0].DefaultView;
}
...全文
676 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Defonds 2016-06-22
  • 打赏
  • 举报
回复
真是的,才 10 万,就是把全表都放在内存里进行全表检索,也不至于那么慢吧。 另外,想出来读写分离的同学,你让单表上千万还在苦苦挣扎进行毫秒级优化的道友们情何以堪
jhll 2016-06-21
  • 打赏
  • 举报
回复
索引不能加,因为这是实时更新的表,索引加了会严重影响效率,怕重复记录可以加主键,这样就不会有重复数据了
猪猪猪爱的 2016-06-21
  • 打赏
  • 举报
回复
查询语句后加(nolock) ,查询条件做了联合索引和聚集索引,10万条数据不会慢。 不稳定应该是更新的时候锁表了,查询在等待。
xhmlwaf 2016-06-21
  • 打赏
  • 举报
回复
可以考虑批量,不过我觉得才10w条数据,用redis就好了
正怒月神 2016-06-20
  • 打赏
  • 举报
回复
没有什么特别好的办法。因为你的数据会频繁更新。所以缓存也是没有用的。
xuzuning 2016-06-20
  • 打赏
  • 举报
回复
如果是多了就删除,那么唯一索引(为了保证数据不出现重复,加了唯一索引)就有问题了,这是题外话
shsyzl007 2016-06-20
  • 打赏
  • 举报
回复
引用 11 楼 xuzuning 的回复:
如果你的统计是准确得话,从图二可以清楚得看到:瓶颈在数据传输上 另外你的 select 指令中并没有 top 500 子句,所以你的测试是不公允的 查询结果是 500 条和查询结果是 10000 条是没法比较速度的
数据库只存储每个品种的500条,多了会自动清除,所以不用加top 500。 不使用内存数据库的唯一原因就是这些数据需要在其他地方实时显示,需要远程能够访问 可能无法优化了。凑合吧只能。。。
xuzuning 2016-06-20
  • 打赏
  • 举报
回复
如果你的统计是准确得话,从图二可以清楚得看到:瓶颈在数据传输上 另外你的 select 指令中并没有 top 500 子句,所以你的测试是不公允的 查询结果是 500 条和查询结果是 10000 条是没法比较速度的
  • 打赏
  • 举报
回复
总共10w条?但更新频繁?那为啥不考虑用redis内存数据库呢? 你都可以按品种建立各自的区域,一个区域就500条记录
我叫小菜菜 2016-06-20
  • 打赏
  • 举报
回复
主键即id,默认是唯一索引,不需要手动添加索引。 可以对“品种”添加索引。select的是品种列匹配的500条记录,必须500条全部读出来,所以除了缓存数据库无法再优化,问题解决。
mjp1234airen4385 2016-06-20
  • 打赏
  • 举报
回复
如果你的sql语句不复杂的话,就是索引问题了。 你如果建立了唯一的关键字索引,但是在查询的时候又没有使用这个关键字, 那么你还是建立一个和查询相关的另外索引吧,肯定可以提高速度的。 10w数据,不是个事情
xdashewan 2016-06-20
  • 打赏
  • 举报
回复
查询条件加索引啊,看你sql的执行计划啊
wangyongchao880622 2016-06-20
  • 打赏
  • 举报
回复
硬件在加强点吧!
drifter2002 2016-06-20
  • 打赏
  • 举报
回复
把每个品种存到单独一个数据表,应该会有改进
shsyzl007 2016-06-20
  • 打赏
  • 举报
回复
引用 16 楼 shsyzl007 的回复:
引用 13 楼 xuzuning 的回复:
如果是多了就删除,那么唯一索引(为了保证数据不出现重复,加了唯一索引)就有问题了,这是题外话
不会有问题。因为每个code品种对应最新的价格其实。其实就是商品的价格是不断变的,我只需要最新的500条价格数据。价格插入时可能会出现重复就加了个唯一索引
唯一索引是限制的品种和添加的时间。所以把之前的删了没啥影响
shsyzl007 2016-06-20
  • 打赏
  • 举报
回复
引用 13 楼 xuzuning 的回复:
如果是多了就删除,那么唯一索引(为了保证数据不出现重复,加了唯一索引)就有问题了,这是题外话
不会有问题。因为每个code品种对应最新的价格其实。其实就是商品的价格是不断变的,我只需要最新的500条价格数据。价格插入时可能会出现重复就加了个唯一索引
lshfong 2016-06-20
  • 打赏
  • 举报
回复
一是加索引 二用NOsql
shsyzl007 2016-06-19
  • 打赏
  • 举报
回复
引用 6 楼 lovelj2012 的回复:
在10W条记录中检索一个品名的500条数据,应该是瞬间的事情,你的表是不是有索引,看下下执行计划? 实在不行,你可以把这些数据按照品名横向分离,比如采用分区表。
为了保证数据不出现重复,加了唯一索引。分区表?你的意思是说把每个品种单独放一个表里吗? 顺便说下,这些数据不放内存最主要的问题是,要一个端能看到这些实时数据,放内存如果出现异常无法判断是否是数据出了问题还是其他地方出了问题
江南小鱼 2016-06-19
  • 打赏
  • 举报
回复
在10W条记录中检索一个品名的500条数据,应该是瞬间的事情,你的表是不是有索引,看下下执行计划? 实在不行,你可以把这些数据按照品名横向分离,比如采用分区表。
我是飞云 2016-06-19
  • 打赏
  • 举报
回复
10万还需要做读写分离?这世界有这么疯狂了么? 索引做了么?
加载更多回复(5)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧