zoukankan      html  css  js  c++  java
  • sql查询(转)

    http://www.51testing.com/html/41/n-4421541.html

    1 负向条件查询(例如:!=、not in、not exists)都是不能使用索引,少用

    可以使用:select * from Order where Status in (1,2,3)

    2 尽量不要使用前导模糊查询,尽量不要使用前导模糊查询, 通配符要放于后面 like "XXX%"

    3 尽量不要在条件字段上进行运算,会进行全表检索。

    4 索引字段尽量不允许NULL值,单列索引不会存Null值,复合索引不存所有索引列都为Null的值

    5 复合索引,使用时要注意顺序

    select * from User where LoginID = '{LoginID}' and Password = '{Password}'select * from User where Password = '{Password}' and LoginID = '{LoginID}'
      查询时,都是能够准备的命中索引。当我们使用 select * from user where loginid=‘{loginID}’
     
      查询时,也是能够命中索引的。但是,当我们使用
      select * from User where Password = '{Password}'
      查询时,确无法命中索引,这是什么原因呢?
      这是由于,复合索引对于查询的顺序是非常的敏感的,所以,符合索引中包含了几种规则,其中就有全列匹配和最左前缀匹配
    当所有列都能够匹配时,虽然查询的顺序上有不同,但是查询优化器会将顺序进行调整,以满足适合索引的顺序,所以,顺序的颠倒是没有问题的。
    如果所有列不能匹配时,就必须满足最左前缀匹配了,也就是,必须按照从左到右的顺序进行排列
     
    查询时,结果一定只有一条。但是,数据库是不知道的,即使找到了这唯一的一条结果,他也会一直继续,直到扫描完所有的数据。
      因此,在执行这样的查询时,我们可以优化一下,改成:
      select * from User where LoginID = '{LoginID}' limit 1
    6.尽量少用或别用Select *,我们的查询其实都是有目的的,就好像登录一样,我们其实只需要知道有结果返回就行了,使用select count(0)就可以了,但是我们使用select * 的话,就会消耗大量无效的数据库内存。
  • 相关阅读:
    WF4.0 Beta1 自定义跟踪
    WF4.0 Beta1 流程设计器与Activity Designer
    新版本工作流平台的 (二) 权限算法(组织结构部分)
    WF4.0 Beta1 WorkflowInvoker
    WF4.0 基础篇 (十) Collection 集合操作
    WF4.0 基础篇 (十五) TransactionScope 事物容器
    WF4.0 基础篇 (六) 数据的传递 Arguments 参数
    WF4B1 的Procedural Activity 之InvokeMethod , InvokeMethod<T> 使用
    WF4.0 Beta1 异常处理
    WF4.0 Beta1 变量 Variables
  • 原文地址:https://www.cnblogs.com/caojuansh/p/9869030.html
Copyright © 2011-2022 走看看