為資料庫建立索引(一)_PHP教程

來源:互聯網
上載者:User
就象許多的PHP開發人員一樣,在剛開始建立動態網站的時候,我都是使用相對簡單的資料結構。PHP在串連資料庫方面的確實是十分方便(譯者註:有些人認為PHP在串連不同資料庫時沒有一個統一的介面,不太方便,其實這可以通過一些擴充庫來做到這一點),你無需看大量的設計文檔就可以建立和使用資料庫,這也是PHP獲得成功的主要原因之一。
  前些時候,一位頗進階的程式員居然問我什麼叫做索引,令我感到十分的驚奇,我想這絕不會是滄海一粟,因為有成千上萬的開發人員(可能大部分是使用MySQL的)都沒有受過有關資料庫的正規培訓,儘管他們都為客戶做過一些開發,但卻對如何為資料庫建立適當的索引所知較少,因此我起了寫一篇相關文章的念頭。
  最普通的情況,是為出現在where子句的欄位建一個索引。為方便講述,我們先建立一個如下的表。
  CREATE TABLE mytable (
     id serial primary key,
     category_id int not null default 0,
     user_id int not null default 0,
     adddate int not null default 0
  );
  很簡單吧,不過對於要說明這個問題,已經足夠了。如果你在查詢時常用類似以下的語句:
   SELECT * FROM mytable WHERE category_id=1;
  最直接的應對之道,是為category_id建立一個簡單的索引:
   CREATE INDEX mytable_categoryid
     ON mytable (category_id);
  OK,搞定?先別高興,如果你有不止一個選擇條件呢?例如:
   SELECT * FROM mytable WHERE category_id=1 AND user_id=2;
  你的第一反應可能是,再給user_id建立一個索引。不好,這不是一個最佳的方法。你可以建立多重的索引。
  CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);
  注意到我在命名時的習慣了嗎?我使用"表名_欄位1名_欄位2名"的方式。你很快就會知道我為什麼這樣做了。
  現在你已經為適當的欄位建立了索引,不過,還是有點不放心吧,你可能會問,資料庫會真正用到這些索引嗎?測試一下就OK,對於大多數的資料庫來說,這是很容易的,只要使用EXPLAIN命令:
  EXPLAIN
   SELECT * FROM mytable
    WHERE category_id=1 AND user_id=2;
   This is what Postgres 7.1 returns (exactly as I expected)
   NOTICE: QUERY PLAN:
   Index Scan using mytable_categoryid_userid on
     mytable (cost=0.00..2.02 rows=1 width=16)
  EXPLAIN
以上是postgres的資料,可以看到該資料庫在查詢的時候使用了一個索引(一個好開始),而且它使用的是我建立的第二個索引。看到我上面命名的好處了吧,你馬上知道它使用適當的索引了。

http://www.bkjia.com/PHPjc/631058.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/631058.htmlTechArticle就象許多的PHP開發人員一樣,在剛開始建立動態網站的時候,我都是使用相對簡單的資料結構。PHP在串連資料庫方面的確實是十分方便(譯者...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.