表:Users,Categories,Contents,Tags

UserContentRelatedship,CategoryContentRelatedship,ContentTagRelatedship(多对多关系)

不使用分页查询,条件查询只获取记录的标识字段,测试时100W记录首次查询时间为400ms,之后为80ms,

在查询Content与Category对映关系时.通常是多个Content的列表获取其Category信息

所以

在程序中创建一个IDictionary(Of Guid, IList(Of Guid))来表示当前Content与Category的对应关系.

将这些Content的Category关系一次性从数据库中取出,填充到IDictionary(Of Guid, IList(Of Guid))中.

将所有的Category标识去掉重复,一次性从数据库中取出Categories(这个步骤中可以加入缓存,对于已在缓存中存在的Category就不从数据库中取了.).

把取出的Categories填充到Content的Categories属性中.

到此则完成Content的Categories属性填充.

写的好像不怎么明白,只是个想法还没写成具体代码.

在Oxite中看到Post的FillTags的扩展方法,发现这是每个Post都要查询一次数据库.如果一个页面中要显示100个Post,那不就需要查询上100次?那还要加上FillUsers,FillCategories,Fill.....那相当恐怖了.虽然可以用缓存,但缓存多了这个筛选也是相当耗时的.还不如交给微软的SQL来做些工作.或者Oracle.

我改进一下,通过标识来决定一切,所有的查询我只有一个储存过程,并具只返回 标识字段(来自Openlab.Framework,他从来哪的我就不清楚了.),这样做的好处是可以充分利用MSSQL优化效果,如果你觉得不爽可以加入分页语句,但这样似乎就用不上MSSQL本身的缓存了,我在技术远远落后于MSSQL开发团队的情况下,还是把重要的事交给他们吧.

太晚了,不写了,明天把代码写上生成一些数据测试一下.

更多相关文章

  1. repcached与mysql缓存測试
  2. 为什么数据库设计人员不让标识列从最小值开始而不是从1开始?
  3. 如何将所有插入调用标识到表中
  4. Retrofit2,okhttp3 通过拦截器(Interceptor)两种缓存(离线和在线)
  5. Android图片缓存处理
  6. 使用drawables的IntelliJ Android缓存构建忽略了更改
  7. Android Studio Gradle 缓存文件夹设置
  8. android NDK 实用学习(四)-类缓存
  9. Javascript实现页面加载完成后自动刷新一遍清除缓存文件

随机推荐

  1. Android录音实现——使用AtudioRecord
  2. Android Studio学习之-控件总结
  3. Android实现根据条件自动转换手机震动和
  4. Android应用安全之Android平台上的跨应用
  5. android:taskAffinity && android:allowT
  6. 【Android 开发】: Android 消息处理机制
  7. [Android]发布Sqlite数据库
  8. Android Wear带你理解跨设备的Android 技
  9. android之listview使用方法(一)
  10. Android之AndroidStudio生成jar