`
annan211
  • 浏览: 446988 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

mysql 建立复合索引

 
阅读更多
   
   [size=medium]
      为什么使用数据索引能提高效率
   [/size]
      数据索引的存储是有序的
    在有序的情况下,通过索引查询一个数据是无需遍历索引记录的
    极端情况下,数据索引的查询效率为二分法查询效率,趋近于 log2(N)

      对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。下面用几个例子对比查询条件的不同对性能影响.

    
create table test(
a int,
b int,
c int,
KEY a(a,b,c)
);

优: select * from test where a=10 and b>50
差: select * from test where a50

优: select * from test where order by a
差: select * from test where order by b
差: select * from test where order by c

优: select * from test where a=10 order by a
优: select * from test where a=10 order by b
差: select * from test where a=10 order by c

优: select * from test where a>10 order by a
差: select * from test where a>10 order by b
差: select * from test where a>10 order by c

优: select * from test where a=10 and b=10 order by a
优: select * from test where a=10 and b=10 order by b
优: select * from test where a=10 and b=10 order by c

优: select * from test where a=10 and b=10 order by a
优: select * from test where a=10 and b>10 order by b
差: select * from test where a=10 and b>10 order by c

索引原则

1.索引越少越好
原因:主要在修改数据时,第个索引都要进行更新,降低写速度。
2.最窄的字段放在键的左边
3.避免file sort排序,临时表和表扫描.


 
     复合索引的建立原则:

如果您很可能仅对一个列多次执行搜索,则该列应该是复合索引中的第一列。如果您很可能对一个两列索引中的两个列执行单独的搜索,则应该创建另一个仅包含第二列的索引。
如上图所示,如果查询中需要对年龄和性别做查询,则应当再新建一个包含年龄和性别的复合索引。
包含多个列的主键始终会自动以复合索引的形式创建索引,其列的顺序是它们在表定义中出现的顺序,而不是在主键定义中指定的顺序。在考虑将来通过主键执行的搜索,确定哪一列应该排在最前面。
请注意,创建复合索引应当包含少数几个列,并且这些列经常在select查询里使用。在复合索引里包含太多的列不仅不会给带来太多好处。而且由于使用相当多的内存来存储复合索引的列的值,其后果是内存溢出和性能降低。

        
复合索引对排序的优化:

复合索引只对和索引中排序相同或相反的order by 语句优化。
在创建复合索引时,每一列都定义了升序或者是降序。如定义一个复合索引:
 

  CREATE INDEX idx_example   
ON table1 (col1 ASC, col2 DESC, col3 ASC)  




  索引的缺点:
1.       占用磁盘空间。
2.       增加了插入和删除的操作时间。一个表拥有的索引越多,插入和删除的速度越慢。如 要求快速录入的系统不宜建过多索引。



其他情况 参见 博客 http://webnoties.blog.163.com/blog/static/183525141201310182313851/
分享到:
评论

相关推荐

    MySQL进阶学习需要掌握的具体内容解析,MySQL数据库如何使用和优化索引.docx

    索引是MySQL中一个重要的概念,它可以显著提高查询性能。...但是,在使用复合索引时,应该考虑列的顺序,以确保复合索引最大化查询性能。 在MySQL中,避免在WHERE子句中使用函数可以提高查询性能。当您在WHE

    MySQL联合索引功能与用法实例分析

    对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧...

    MySQL 5.1中文手冊

    7.4.5. MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. MySQL如何计算打开的表 7.4.9. MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1...

    mysql 索引的基础操作汇总(四)

    主要为大家详细介绍了mysql 索引的基础操作汇总,涵盖了创建和查看索引、删除索引等操作,感兴趣的小伙伴们可以参考一下

    MySQL 5.1官方简体中文参考手册

    7.4.5. MySQL如何使用索引 http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/(第 7/24 页)2006-11-02 19:12:13 MySQL 5.1 Reference Manual 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. ...

    MySql 索引、锁、事务知识点小结

    本文总结了MySql 索引、锁、...从功能上说,分为 6 种:普通索引,唯一索引,主键索引,复合索引,外键索引,全文索引。 详细说说 6 种索引: 普通索引:最基本的索引,没有任何约束。 唯一索引:与普通索引类似,但

    MySQL 5.1参考手册

    7.4.5. MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. MySQL如何计算打开的表 7.4.9. MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1...

    MySQL 5.1参考手册中文版

    7.4.5. MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. MySQL如何计算打开的表 7.4.9. MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 ...

    MySQL 5.1参考手册 (中文版)

    7.4.5. MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. MySQL如何计算打开的表 7.4.9. MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1...

    MySQL中的联合索引学习教程

    对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧...

    mysql5.1中文手册

    MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. MySQL如何计算打开的表 7.4.9. MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL...

    mysql 表索引的一些要点

    7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:  A、正确选择复合索引中的主列字段,一般是选择性较好的字段; B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否...

    MYSQL中文手册

    7.4.5. MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. MySQL如何计算打开的表 7.4.9. MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器...

    深入讲解MySQL Innodb索引的原理

    主要给大家介绍了关于MySQL Innodb索引原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    索引什么是索引.pdf

    【索引】什么是索引 1 什么是MySQL索引? 2 MySQL索引的类型 3 MySQL索引的使用场景 4 MySQL索引的最佳实践 5 总结 6 扩展知识: 6.1 索引的创建和删除: 6.2 复合索引: 6.3 索引的大小: 6.4 索引的优化:

    深入理解MongoDB的复合索引

    当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样适用于其他的数据库比如mysql)。 mongo-9552:PRIMARY> db.person.find() { "_id" : ...

    Mysql查询优化详解(含示例)

    接着,详细阐述了索引优化技巧,包括创建合适的索引、避免冗余索引和使用复合索引。文章还探讨了优化查询语句的方法,如避免在列上进行函数或计算、使用连接代替子查询等。此外,还强调了优化表结构、服务器配置以及...

    MySQL 性能优化

    索引作用Btree 数据结构索引利弊索引的利索引的弊索引分类主键索引单列索引唯一索引复合索引Navicat for MySQL 操作索引MySQL 创建索引、删除索引、修改索引、查看索引SQL 执行计划查询优化器影响expain 关键字id 列...

    mysql官方中文参考手册

    7.4.5. MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. MySQL如何计算打开的表 7.4.9. MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1...

Global site tag (gtag.js) - Google Analytics