国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

php為數(shù)據(jù)庫建立索引

2024-05-04 21:49:27
字體:
供稿:網(wǎng)友

就象許多的PHP開發(fā)者一樣,在剛開始建立動態(tài)網(wǎng)站的時候,我都是使用相對簡單的數(shù)據(jù)結構,PHP在連接數(shù)據(jù)庫方面的確實是十分方便,譯者注,有些人認為PHP在連接不同數(shù)據(jù)庫時沒有一個統(tǒng)一的接口,不太方便,其實這可以通過一些擴展庫來做到這一點,你無需看大量的設計文檔就可以建立和使用數(shù)據(jù)庫,這也是PHP獲得成功的主要原因之一.

前些時候,一位頗高級的程序員居然問我什么叫做索引,令我感到十分的驚異,我想這絕不會是滄海一粟,因為有成千上萬的開發(fā)者,可能大部分是使用MySQL的,都沒有受過有關數(shù)據(jù)庫的正規(guī)培訓,盡管他們都為客戶做過一些開發(fā),但卻對如何為數(shù)據(jù)庫建立適當?shù)乃饕^少,因此我起了寫一篇相關文章的念頭.

最普通的情況,是為出現(xiàn)在where子句的字段建一個索引,為方便講述,我們先建立一個如下的表.

  1. CREATE TABLE mytable ( 
  2.    id serial primary key
  3.    category_id int not null default 0, 
  4.    user_id int not null default 0, 
  5.    adddate int not null default 0 
  6. ); 

很簡單吧,不過對于要說明這個問題,已經(jīng)足夠了,假如你在查詢時常用類似以下的語句:

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名"的方式,你很快就會知道我為什么這樣做了.

現(xiàn)在你已經(jīng)為適當?shù)淖侄谓⒘怂饕?不過,還是有點不放心吧,你可能會問,數(shù)據(jù)庫會真正用到這些索引嗎?測試一下就OK,對于大多數(shù)的數(shù)據(jù)庫來說,這是很輕易的,只要使用EXPLAIN命令:

  1. EXPLAIN 
  2.  
  3.  SELECT * FROM mytable 
  4.   WHERE category_id=1 AND user_id=2; 
  5.  
  6.  This is what Postgres 7.1 returns (exactly as I expected) 
  7.  
  8.  NOTICE: QUERY PLAN: 
  9.  
  10.  Index Scan using mytable_categoryid_userid on 
  11.    mytable (cost=0.00..2.02 rows=1 width=16) 
  12.       //開源代碼Vevb.com 
  13. EXPLAIN 

以上是postgres的數(shù)據(jù),可以看到該數(shù)據(jù)庫在查詢的時候使用了一個索引,一個好開始,而且它使用的是我創(chuàng)建的第二個索引,看到我上面命名的好處了吧,你馬上知道它使用適當?shù)乃饕?

接著,來個稍微復雜一點的,假如有個ORDER BY字句呢?不管你信不信,大多數(shù)的數(shù)據(jù)庫在使用order by的時候,都將會從索引中受益.

SELECT * FROM mytable

WHERE category_id=1 AND user_id=2

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 江西省| 尼玛县| 革吉县| 潮安县| 海林市| 彭泽县| 贺州市| 蒙城县| 兴仁县| 永顺县| 监利县| 长丰县| 安西县| 淄博市| 宜兰市| 巴青县| 海门市| 崇明县| 台东市| 余姚市| 巩义市| 宁明县| 娱乐| 凤城市| 班戈县| 尖扎县| 闵行区| 宿州市| 连城县| 临江市| 北票市| 东城区| 波密县| 鹤壁市| 萝北县| 铜梁县| 巴林右旗| 江油市| 方正县| 车致| 徐汇区|