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 * 的话,就会消耗大量无效的数据库内存。
  • 相关阅读:
    我喜欢网站
    我喜欢网站
    wpf Textbox 回车就换行
    wpf Textbox 回车就换行
    arguments.callee的用法
    与您分享
    Examples — guidata v1.5.1 documentation
    与您分享
    与您分享
    hierarchical clustering algorithms
  • 原文地址:https://www.cnblogs.com/caojuansh/p/9869030.html
Copyright © 2011-2022 走看看