DataBase杂谈

在拜读Joseph albahari的Threading in C#文章中,从线程问题的提出,到解决方案的实现。及后续利用Microsoft提供的现成DLL提供的现有方法来处理,

多线程之间相互关联及处理方法。感慨千万。

而后,进入其广告链接LinqPad工具后,下载安装,读到关于循环查询的语句时,涉及到循环从DB数据中进行查询,采用Predicate的一个方法,可以解决反复查询数据库的问题。

IQueryable<Product> SearchProducts (params string[] keywords)
{  var predicate = PredicateBuilder.False<Product>();
  foreach (string keyword in keywords)
  {
    string temp = keyword;
    predicate = predicate.Or (p => p.Description.Contains (temp));
  }
  return dataContext.Products.Where (predicate);}
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;
public static class PredicateBuilder
{  public static Expression<Func<T, bool>> True<T> ()  { return f => true;  }
  public static Expression<Func<T, bool>> False<T> () { return f => false; }
   public static Expression<Func<T, bool>> Or<T> (this Expression<Func<T, bool>> expr1,
                                                       Expression<Func<T, bool>> expr2)
  { var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast<Expression> ());
    return Expression.Lambda<Func<T, bool>>
          (Expression.OrElse (expr1.Body, invokedExpr), expr1.Parameters);}
 
  public static Expression<Func<T, bool>> And<T> (this Expression<Func<T, bool>> expr1,
                                                       Expression<Func<T, bool>> expr2)
  {
    var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast<Expression> ());
    return Expression.Lambda<Func<T, bool>>
          (Expression.AndAlso (expr1.Body, invokedExpr), expr1.Parameters);
  }
}

 最终通过循环添加执行语句后,变成OR。而,通常是用的查询语句中,会碰到OR, IN, BETWEEN, 甚至用到 >、<、!=等具体的方法。 

在使用Index的情况下, 性能最优顺序 BETWEEN   >  Unit ALL > IN > OR 等方法。当然如果不存在Index的情况下,相差无几。

前日刚好对之前管理的DB客户服务器进行了Index Rebuild,将原本存在个Page也上的Index进行了断边化处理。 原本的NONClustered Index改成Clustered Index。

普通的针对数据保护容错方面的对应措施。多Session并存控制

在SQLServer的DB环境中,有如下几种模式 

READ UNCOMMITTED

READ COMMITTED (Default)

REPEATABLE READ

SERIALIZABLE

SNAPSHOT

 普通默认模式是Read Commited,即保证多个Session之间的基本隔离。

https://www.interfacett.com/blogs/understanding-isolation-levels-sql-server-2008-r2-2012-examples/

 

posted @ 2017-09-13 14:50  tomclock  阅读(172)  评论(0编辑  收藏  举报