MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?

jackxiang 2009-12-28 15:05 | |
PRIMARY, INDEX, UNIQUE 这3种是一类
PRIMARY 主键。 就是 唯一 且 不能为空。
INDEX 索引,普通的
UNIQUE 唯一索引。 不允许有重复。
FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。

举个例子来说,比如你在为某商场做一个会员卡的系统。
这个系统有一个会员表
有下列字段:
会员编号   INT
会员姓名   VARCHAR(10)
会员身份证号码   VARCHAR(18)
会员电话   VARCHAR(10)
会员住址   VARCHAR(50)
会员备注信息  TEXT

那么这个 会员编号,作为主键,使用 PRIMARY
会员姓名 如果要建索引的话,那么就是普通的 INDEX
会员身份证号码   如果要建索引的话,那么可以选择 UNIQUE (唯一的,不允许重复)
会员备注信息 , 如果需要建索引的话,可以选择 FULLTEXT,全文搜索。

不过 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。
用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。


语法:
UNIQUE KEY `test` (`xref_key`,`xref_dbname`)
UNIQUE KEY `xref_key` (`xref_key`,`xref_dbname`)

       上述语法检查xref_key与xref_dbname的组合是否是唯一值,可以设定多个字段的组合。其中,test是索引表中的字段名称。
        该方法适合用来解决多个字段相互依赖,且必须满足唯一性的条件的情况。在经常新增或删除资料表中auto_increment的primary key会造成大量的断层,这类易变动的资料表使用auto_increment并不是一个很适合的索引值,所以可以采取unique key来处理。

当有很多的INSERT语句需要被顺序地执行时,IGNORE关键字就使操作变得很方便。使用它可以保证不管哪一个INSERT包含了重复的键值,MySQL都回跳过它(而不是放弃全部操作)。

  在这种情况下,我们还可以通过添加MySQL4.1新增加的ON DUPLICATE KEY UPDATE子句,使MySQL自动把INSERT操作转换为UPDATE操作。这个子句必须具有需要更新的字段列表,这个列表和UPDATE语句使用的列表相同。


  mysql> insert into menus(id,label,url) values(4,'Contact us','contactus.html')
  -> on duplicate key update label='Contact us',url='contactus.html';
  Query OK, 2 rows affected (0.05 sec)

  在这种情况下,如果MySQL发现表已经包含具有相同唯一键的记录,它会自动更新旧的记录为ON DUPLICATE KEY UPDATE从句中指定的新值:


  mysql> select * from menus;
  +----+------------+----------------+
  | id | label     | url           |
  +----+------------+----------------+
  | 1 | Home      | home.html     |
  | 2 | About us  | aboutus.html  |
  | 3 | Services  | services.html |
  | 4 | Contact us | contactus.html |
  +----+------------+----------------+
  4 rows in set (0.01 sec)

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2393/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2013-1-6 21:08
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]