• 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/
    Love it, and you live without it
  • 相关阅读:
    获取Enum枚举值描述的几法方法
    c# 快速验证代理IP是否有用
    解析JSON对象与字符串之间的相互转换
    MVC4相关Razor语法以及Form表单(转载)
    MVC4数据注解和验证
    C#在Json反序列化中处理键的特殊字符
    EasyUI 兼容 IE6 方法总结
    uploadify在IE6下的问题
    Could not resolve dependencies for project, Failed to read artifact descriptor for
    shell 文本单词计数
  • 原文地址:https://www.cnblogs.com/tomclock/p/7514934.html
Copyright © 2020-2023  润新知