爪哇一角

          共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
          posts - 3, comments - 6, trackbacks - 0, articles - 99
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          SQL Server索引

          Posted on 2009-01-22 09:10 非洲小白臉 閱讀(320) 評論(0)  編輯  收藏 所屬分類: SQL Server
          1、評估索引本身的占用空間,當索引相對于其數據本身過大可能會無明顯作用。這種情況體現在:表很小,索引列過多,索引碎片過多。當索引在select中不起作用時,你還必須在insert和update、delete這些操作中去維護這些不起作用的數據。
          2、In語句不一定不能使用索引,where id in(1,2)和where id =1 or id=2是等效的,這里的in和not in的性能是相同的。而不能使用索引的原因是嵌套查詢: where id in(select 1 union select 2).
          3、解除嵌套查詢無法利用索引的辦法是用exists子查詢,select * from tb1 a where exists(select 1 from tb2 where id=a.id)。而exists和not exists的性能和tb1的數據量無關,他們的性能差別在于tb2中的數據量。
          4、Like子句可以利用索引,所以盡可能少用left,right和substring函數。
          5、函數不能使用索引,比如convert(varchar(7),date,120)='2008-06',或者datediff函數、甚至和常量的加減乘除運算等,正確的做法是用比較符號或者盡可能把datediff之類的函數放到等號右邊。
          6、不用擔心隱式轉換,它總是轉換等號右邊的。比如 where id='2' 和where id=2是等效的。
          7、聚集索引的查詢性能好于非聚集索引,但是維護代價很大,對于他的數據改變會引起整行數據的物理位置移動。同時聚集索引還要為非聚集索引提供索引服務,所以盡量不用過大的列或過多的列作聚集索引。
          8、聚集索引可以極大優化大于,小于,group by和order by以及join語句的查詢性能。
          9、一張表只能由一個聚集索引。
          10、唯一索引有助于查詢優化。
          11、聯合索引的第一列可以單獨使用,其他的索引列在單獨的where子句中不起作用。
          12、索引的升序降序對order by子句的影響很大。
          13、符合特定條件的計算列也可以創建索引。

          主站蜘蛛池模板: 宜川县| 兴安县| 五原县| 宽甸| 克山县| 红桥区| 千阳县| 珠海市| 安泽县| 金沙县| 任丘市| 儋州市| 教育| 耒阳市| 邯郸市| 界首市| 清新县| 红河县| 金山区| 喜德县| 布尔津县| 关岭| 秦安县| 罗甸县| 贺州市| 武陟县| 南充市| 探索| 秦安县| 金溪县| 保定市| 芒康县| 彰化县| 石棉县| 通化市| 龙川县| 北宁市| 兴安县| 高州市| 嘉义市| 青铜峡市|