MySQL索引经验之浅见.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MySQL索引经验之浅见

??? 大家都知道在数据库表中,使用索引可以大大提高查询速度。本文讲了这么多,也无非是想利用索引提高数据库的执行效率。不过索引只是提高效率的一个因素。如果你的MySQL有大数据的表,就需要花时间研究建立最优秀的索引或优化查询语句。 一、索引分单列索引和组合索引 单列索引:即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。 组合索引:即一个索包含多个列。 二、介绍一下索引的类型 1.普通索引。 这是最基本的索引,它没有任何限制。它有以下几种创建方式: (1)创建索引:CREATE INDEX indexName ON tableName tableColumns length ;如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB 和 TEXT 类型,必须指定length,下同。 (2)修改表结构:ALTER tableName ADD INDEX [indexName] ON tableColumns length 上海整形美容 (3)创建表的时候直接指定:CREATE TABLE tableName [...], INDEX [indexName] tableColumns length ; 2.唯一索引。 它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式: (1)创建索引:CREATE UNIQUE INDEX indexName ON tableName tableColumns length 上海整形医院 (2)修改表结构:ALTER tableName ADD UNIQUE [indexName] ON tableColumns length (3)创建表的时候直接指定:CREATE TABLE tableName [...], UNIQUE [indexName] tableColumns length ; 3.主键索引 它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:CREATE TABLE testIndex i_testID INT NOT NULL AUTO_INCREMENT,vc_Name VARCHAR 16 NOT NULL,PRIMARY KEY i_testID ; 当然也可以用ALTER命令。 记住:一个表只能有一个主键。 4.全文索引 MySQL从3.23.23版开始支持全文索引和全文检索。这里不作讨论,删除索引的语法:DROP INDEX index_name ON tableName 三、单列索引和组合索引 为了形象地对比两者,再建一个表: CREATE TABLE myIndex i_testID INT NOT NULL AUTO_INCREMENT, vc_Name VARCHAR 50 NOT NULL, vc_City VARCHAR 50 NOT NULL, i_Age INT NOT NULL, i_SchoolID INT NOT NULL, PRIMARY KEY i_testID ; 在这10000条记录里面7上8下地分布了5条vc_Name erquan的记录,只不过city,age,school的组合各不相同。来看这条T-SQL: SELECT i_testID FROM myIndex WHERE vc_Name @#erquan@# AND vc_City @#郑州@# AND i_Age 25; 首先考虑建单列索引: 在vc_Name列上建立了索引。执行T-SQL时,MYSQL很快将目标锁定在了vc_Name erquan的5条记录上,取出来放到一中间结果集。在这个结果集里,先排除掉vc_City不等于郑州的记录,再排除i_Age不等于25的记录,最后筛选出唯一的符合条件的记录。 虽然在vc_Name上建立了索引,查询时MYSQL不用扫描整张表,效率有所提高,但离我们的要求还有一定的距离。同样的,在vc_City和i_Age分别建立的单列索引的效率相似。 为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将vc_Name,vc_City,i_Age建到一个索引里: ALTER TABLE myIndex ADD INDEX name_city_age vc_Name 10 ,vc_City,i_Age ;--注意了,建表时,vc_Name长度为50,这里为什么用10呢?因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高INSERT的更新速度。 执行T-SQL时,MySQL无须扫描任何记录就到找到唯一的记

文档评论(0)

wuyuetian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档