none
sql语句的效率问题 RRS feed

  • 问题

  • 各位大大,小弟想请问,下面两句sql语句,那句效率更高一些

    select * from tableaaa where stufilestatus = '0' and studentstatus = '1'

    select * from tableaaa where stufilestatus+studentstatus = '01'

    因为stufilestatus和studentstatus分别有好几种取值,所以想问哪一种更好一些,谢谢。

     

    2011年3月3日 3:02

答案

  • 如楼上各位所说,通常第一个效率更高。建议用stufilestatus和studentstatus 建立复合索引。

    但是,也可以为第二个语句单独建立视图索引。不过除非SQL语句不便修改,还是第一个语句的索引更方便。


    想不想时已是想,不如不想都不想。
    • 已标记为答案 Ai-hua Qiu 2011年3月10日 6:36
    2011年3月7日 2:50
    版主

全部回复

  • 各位大大,小弟想请问,下面两句sql语句,那句效率更高一些

    select * from tableaaa where stufilestatus = '0' and studentstatus = '1'

    select * from tableaaa where stufilestatus+studentstatus = '01'

    因为stufilestatus和studentstatus分别有好几种取值,所以想问哪一种更好一些,谢谢。

     

    當然是第一個SQL的效率高些了,假如stufilestatus 或studentstatus 存在有效索引的情況下,

    第二個SQL由於存在字段加減操作,可以肯定不會使用索引,

    如果數據量不大的話,性能相差不會很大,但如果數據量大的話性能將會相差幾十倍,你也在看一下它們的執行計劃.

    2011年3月3日 3:28
  • Run them in same batch and check execution plans, will tell you relative cost of each.
    2011年3月3日 3:28
  • 通常来说,第一个应该是比第二个快一些。索引是如何创建的,表中stufilestatus 和 studentstatus 数据量是如何分布的也很重要。 

    2011年3月4日 8:18
  • 如楼上各位所说,通常第一个效率更高。建议用stufilestatus和studentstatus 建立复合索引。

    但是,也可以为第二个语句单独建立视图索引。不过除非SQL语句不便修改,还是第一个语句的索引更方便。


    想不想时已是想,不如不想都不想。
    • 已标记为答案 Ai-hua Qiu 2011年3月10日 6:36
    2011年3月7日 2:50
    版主