索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引:
在经常需要搜索的列上,可以加快搜索的速度;
在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
最普通的情况,是为出现在where子句的字段建一个索引。为方便讲述,先建立一个如下的表。 CREATETABLEmytable( idserial primary key, category_id int not null default0, user_id int not null default0, adddate int not null default0 ); 如果在查询时常用类似以下的语句: 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名"的方式。