|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
培训的第三阶段,开始接触MYSQL,设计数据库,学习PHP如何去连接MYSQL数据库。对于MYSQL,我并不陌生,因为学校开设了Linux系统的课程,对于数据库的操作。数据|数据库|索引 就象很多的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的数据,可以看到该数据库在查询的时分利用了一个索引(一个好入手下手),并且它利用的是我创立的第二个索引。看到我下面定名的优点了吧,你即刻晓得它利用恰当的索引了。 聪明的你,显然已经逐渐的开悟了,慢慢的理解了编程的概念,那么祝贺你,你已经迈出了成功的第一步。 |
|