暂无 |

1 索引

1.1 索引的种类

主索引键的应用很常见,而且一个表格通常会有一个,而且只能有一个。在一个表格中,设定为主索引键的栏位值不可以重复,而且不可以储存「NULL」值。因为这样的限制,所以很适合使用在类似编码、代号或身份证字号这类栏位。

唯一索引也称为「不可重复索引」,在一个表格中,设定为唯一索引的栏位值不可以重复,但是可以储存「NULL」值。这种索引适合用在类似员工资料表格中储存电子邮件帐号的栏位,因为员工不一定有电子邮件帐号,所以允许储存「NULL」值,可以每一个员工的电子邮件帐号都不可以重复。

非唯一索引用来增加查询与维护资料效率的索引。设定为非唯一索引的栏位值可以重复,也可以储存「NULL」值。

「FULLTEXT」索引只能用在「CHAR」、「VARCHAR」与「TEXT」型态的栏位,而且表格使用的储存引擎必须是「MyISAM」,一般会称为「全文检索」,可以提高搜寻大量文字的效率。

「SPATIAL」索引是「SPATIAL」型态栏位专用的,而且表格使用的储存引擎必须是「MyISAM」。「FULLTEXT」与「SPATIAL这两种索引不会在这里讨论。

注:建立与管理索引的方式,在「表格与索引」中讨论。

1.2 建立需要的索引

索引有两个主要的用途:主索引键与唯一索引可以避免重复的资料;主索引键、唯一索引与非唯一索引都可以增加资料库的效率。如果需要为了增加效率而建立索引的话,你可以使用下列最基本的原则:

mysql_20_snap_01

除了使用在「WHERE」子句中判断条件的栏位,还有「ORDER BY」与「GROUP BY」子句中指定的栏位,也都可以使用建立索引来增加效率。不过建立这样的索引的前提,还是你的表格会储存比较大量的资料,如果表格的资料量不大的话,建立索引反而会浪费储存的空间,效率也增加不多,而且还会让执行新增或修改时的效率变差。

如果想要为了增加效率而建立索引的话,你应该要考虑下列几点:

  • 最重要的,当然是不要建立没有必要的索引,例如上列讨论的情况
  • 索引的栏位尽量不要有「NULL」值
  • 虽然某个栏位很常使用在「WHERE」、「ORDER BY」或「GROUP BY」子句中,也不一定要建立索引。例如性别栏位的值只有两种(使用ENUM('M', 'F')型态),建立索引所增加的效率也不多
  • 主索引键与唯一索引的效率会比非唯一索引好

1.3 建立部份内容的索引

下列是一个用来示范用的表格,它可以储存一般的个人资料,在建立表格的时候,就先把身份证字号的栏位设定为主索引键:

mysql_20_snap_02

在使用这个表格一段时间以后,如果储存的资料量很大,而且又很常使用姓名与地址栏位执行条件的判断,你应该会帮它们建立下列的索引:

mysql_20_snap_03

为姓名栏位建立索引是比较没有问题的,不过地址栏位的长度有255个字元,这样的索引是比较没有效率的,而且你应该比较不会执行所有地址的条件判断,如果比较经常执行的条件判断,是类似「某某县某某市」的话,其实你只要建立部份内容的索引就好了:

mysql_20_snap_04

虽然建立部份内容的索引可以减少索引的大小,不过你还要注意之前讨论的原则,就是建立索引的栏位值不应该有太多重复的值。以上列建立的索引来说,为地址栏位的前六个字元建立索引的话,应该就会有很多重复的值。所以你应该先「分析」表格中的资料:

mysql_20_snap_05

上列的叙述可以知道地址栏位是不是有很多重复的资料,为了建立部份内容的索引前,你也可以先使用下列的查询叙述来确认:

mysql_20_snap_06

如果上列的查询结果,确认地址栏位的前六个字元有很多重复的资料,你可以增加字元的数量后再查询,直到你可以接受的数量后,再使用这个数量来建立部份内容的索引。

java教程
php教程
php+mysql教程
ThinkPHP教程
MySQL
C语言
css
javascript
Django教程

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论