星期四, 11月 28, 2013

db 的index有這麼多搞頭

最近系統流量大,在db遇到些瓶頸
經過dba分析,對index也有比較深入的瞭解


  • index不只index
    以前說設index,就只知道較常查詢的欄位拿來設為index就好了
    經dba細心分析,才知道除了設定外,連多個欄位組合的index前後的順序也有差
    較常查詢的欄位要放前面
  • select除了設index外,還可以...
    可以針對sql語句,帶出指定的select column,也可以指定where的column
  • insert, update也可以設定index
  • cluster index & noncluster index
    看不懂這東西,經dba解釋
    cluster index會將同table的其他欄位一起帶出
    所以cluster index只會有一個
  • 反之nocluster不會,不過就可以彈性的指定必要的欄位 東西帶的少了,搜尋效率自然提升
  • no lock
    可以dirty read的select就加no lock(mssql)吧
    避免waiting
  • db的原生函式會造成full table scan
    本想說先在sql的where句做了一些轉型,這樣比較好過濾
    但dba提出這造成full table scan,效能很差
    改完後,這top sql(slow log)就不見了
  • 用變數存GETDATE
    條件式或異動欄位常用到GETDATE(),有隻SQL用到5次
    DBA建議先存變數裡,這樣compile 1次,也只跑1次

還挺了滿多觀念的,一時還無法全吸收
再慢慢整理了

沒有留言: