`
housheng33
  • 浏览: 239170 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MYSQL建立索引{资料}

    博客分类:
  • sql
阅读更多

1.建立索引的时机:若表中的某字段出现在select、过滤、排序条件中,为该字段建立索引是值得的
2.对于like '%xxx'的模糊查询,普通的索引是无法满足的,需要建立全文索引
3.对于有多个条件的,比如: "...where a=xxx and b=yyy","...where a=xxx order by b","...where a=xxx group by b"。需要使用组合索引。但是组合索引只能在SQL语句中满足"最左前缀"的条件下使用。且组合索引有一些副作用,如索引尺寸可能比数据本身大,因为组合索引的组合条目多。所以在实际应用中,要量身定做,使用慢查询分析工具分析。
4.开启索引缓存,直接在内存中查找索引,不用再磁盘中。
5.建立索引是有代价的当update、delete语句执行时,会使得索引更新,将耗掉更多的时间。可以使用mysqlreport报告,了解select、update、delete、insert、replace各语句所占的百分比。

【6索引尽量做3个以下列】

 

范围列可以用到索引(必须是最左前缀),但是范围列后面的列无法用到索引。同时,索引最多用于一个范围列,因此如果查询条件中有两个范围列则无法全用到索引。

 

concat(first_name, last_name) --相当于相加

 

前缀索引兼顾索引大小和查询速度,但是其缺点是不能用于ORDER BY和GROUP BY操作,也不能用于Covering index(即当索引本身包含查询所需全部数据时,不再访问数据文件本身)。

 

在使用InnoDB存储引擎时,如果没有特别的需要,请永远使用一个与业务无关的自增字段作为主键。

 

http://www.cnblogs.com/kingfly/archive/2013/02/20/2918561.html

 

在数据库中,对性能影响最大的几个策略包括数据库的锁策略、缓存策略、索引策略、存储策略、执行计划优化策略。
索引策略决定数据库快速定位数据的效率,存储策略决定数据持久化的效率。
MySQL中两大主要存储引擎MyISAM和InnoDB采用了不同的索引和存储策略,本文将分析它们的异同和性能。

MySQL主要提供2种方式的索引:B-Tree(包括B+Tree)索引,Hash索引。
B树索引具有范围查找和前缀查找的能力,对于N节点的B树,检索一条记录的复杂度为O(LogN)。
哈希索引只能做等于查找,但是无论多大的Hash表,查找复杂度都是O(1)。
显然,如果值的差异性大,并且以等于查找为主,Hash索引是更高效的选择,它有O(1)的查找复杂度。如果值的差异性相对较差,并且以范围查找为主,B树是更好的选择,它支持范围查找。

这是一个B+树的结构,InnoDB的索引都采取了这种形式,它在B-树的基础上为每个叶子节点加了一个指针指向下一个叶子节点,这样可以快速的进行范围查找。

对于InnoDB,使用了一种改进的B+树索引,称为聚集索引(Clustered Index),它的不同之处在于索引上不仅有索引值的信息,还有整个索引值所在行的信息,免去了一次通过索引值上的位置去取整行的操作。

 

定长的行比不定长的行效率高!把定长数据和不定长数据分开存储,很多时候可以提高效率。

InnoDB引擎按主键顺序插入记录是非常必要的,否则性能将会面临很大风险

http://blog.csdn.net/habout632/article/details/7611111

 

 drop index personname on person 

create index personname on person (person(10))  

 

3. 使用短索引。如果对字符串列进行索引,应该指定前缀长度,只要有可能就应该这样做。例如:如果有一个CHAR(200)的列,如果在前10个或20个字符内,多数值是唯一的。那么就不要对整个列进行索引。对前10个或者20个字符进行索引能够节省大量索引空间,也可能会使查询更快。较小的索引涉及的磁盘IO较少,较短的值比较起来更快。更为重要的是,对于较短的键值,索引高速缓存中的块能容纳更多的键值,因此,MySQL也可以在内存中容纳更多的值。这样就增加了找到行而不用读取索引中较多块的可能性。  

 

4.利用最左前缀。在创建一个n列的索引时,实际是创建了MySQL可利用的n个索引。多列索引起几个索引的作用,因为可利用索引中最左的列集来匹配行。这样的列集称最左前缀。

 

InnoDB表的普通索引都会保存主键的键值,所以主键要尽可能选择较短的数据类型,可以有效减少索引的磁盘占用,提高索引的缓存效果。

 

唯一索引。        

它与前面的"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一

.主键索引        

它是一种特殊的唯一索引,不允许有空值。一个表只能有一个主键。

 

建立这样的组合索引,其实是相当于分别建立了        

vc_Name,vc_City,i_Age        

vc_Name,vc_City        

vc_Name     

这样的三个组合索引!为什么没有vc_City,i_Age等这样的组合索引呢?这是因为mysql组合索引"最左前缀"的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个T-SQL会用到:     

SELECT * FROM myIndex WHREE vc_Name="erquan" AND vc_City="郑州"    

SELECT * FROM myIndex WHREE vc_Name="erquan"

而下面几个则不会用到:     

SELECT * FROM myIndex WHREE i_Age=20 AND vc_City="郑州"    

SELECT * FROM myIndex WHREE vc_City="郑州"

 

只有某些时候的LIKE才需建立索引?是的。因为在以通配符 % 和 _ 开头作查询时,MySQL不会使用索引,如     

SELECT * FROM myIndex WHERE vc_Name like'erquan%'

会使用索引,而     

SELECT * FROM myIndex WHEREt vc_Name like'%erquan'

就不会使用索引了。

分享到:
评论

相关推荐

    给MySQL建立索引1

    总的来说,为MySQL数据库建立索引是一个涉及性能优化的关键环节。正确地设计和使用索引可以大幅提升查询效率,减少数据库服务器的负载,进而提高整体系统性能。但同时,索引也会占用存储空间,并在插入、更新和删除...

    mysql存储与索引技术

    例如,如果查询多涉及时间戳字段,可以针对该字段建立索引,以加快查询速度。但是,索引并非没有代价,它们占用磁盘空间,并可能影响插入和更新操作的速度。对于 InnoDB 引擎,当表空间文件(ibdata1)过大且无法...

    MYSQL创建索引全过程

    代码复制粘贴 改下里面的参数 就可以用 而且参数 也有说明 简单易懂

    用LUCENE连击MYSQL建立索引并搜索的JAVA代码。

    创建好`Document`后,将其添加到`IndexWriter`,这样Lucene就会为这些字段建立索引。 当索引构建完成后,我们就可以实现搜索功能了。首先,创建一个`DirectoryReader`来读取已经建立的索引,然后使用`IndexSearcher...

    MySQL索引优化课件

    同时,避免在经常更新的列上建立索引,因为这会增加写操作的复杂性。 关于存储过程,它们是一组预先编译的SQL语句,可以在需要时重复调用,以提高执行效率。存储过程可以封装复杂的业务逻辑,减少网络通信,提高...

    MySQL索引类型大汇总

    MySQL 索引类型大汇总 ...* 对插入、更新、删除操作频繁的字段建立索引 * 对查询条件中使用的字段建立索引 索引是 MySQL 数据库性能优化的关键所在,合理的使用索引可以提高查询速度,提高数据库的高效运行。

    为mysql数据库建立索引.docx

    在本文中,我们将详细介绍如何为MySQL数据库建立索引,包括单字段索引、多字段索引、组合索引和ORDER BY索引等。同时,我们还将介绍使用EXPLAIN命令来测试数据库是否真正使用了这些索引。 单字段索引 ------------ ...

    MySql索引详解,索引可以大大提高MySql的检索速度

    索引的建立对于MySOL的高效运行是很重要的,索引可以大大提高MvSOL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是...建立索引会占用磁盘空间的索引文件

    mysql数据库以及索引详解.pptx

    ### MySQL数据库及索引详解 #### 一、MySQL简介与数据库发展 MySQL是一款非常流行的开源关系型数据库管理系统,由瑞典MySQL AB公司开发。它以其高性能、稳定性和易用性著称,广泛应用于Web应用程序和企业级系统中...

    mysql索引资料学习

    MySQL索引是数据库管理系统中用于加速数据检索的关键技术。索引的存在使得数据库系统不必全表扫描,而是通过索引直接定位到所需数据,显著提高了查询效率。本篇将深入探讨MySQL中的索引机制,特别是B+树索引,以及...

    MySQL索引分析和优化.pdf

    在未建立索引的情况下,MySQL需要遍历整个表才能找到符合条件的记录;而一旦对`name`列创建了索引,MySQL则能够直接根据索引快速定位到目标记录,从而大大减少了查询时间。 #### 四、索引的类型 MySQL提供了多种...

    MySQL中建立索引的集中方式

     在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表:  CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,...

    MYSQL索引知识

    使用索引时应遵循一定的原则,如避免在频繁更新的列上创建过多索引,对常用于查询的字段建立索引,数据量小的表通常无需索引,以及在区分度高的列上建立索引等。 3. **索引的分类**: - **单列索引**:包括普通...

    MySQL数据库:索引概述.pptx

    并非所有场景都适合建立索引。例如,对于数据量较小的表,索引可能弊大于利,因为它会占用额外的存储空间,并且在插入、更新数据时需要维护索引,可能降低这些操作的速度。此外,频繁插入新记录的表也不宜过度使用...

    如何正确合理的建立MYSQL数据库索引.doc

    如何正确合理的建立MYSQL数据库索引

    04-VIP-Mysql索引优化实战一.pdf

    这是因为对于小表,全表扫描的代价相对较低,而建立和使用索引的开销可能超过其带来的益处。 总之,MySQL索引优化涉及到对查询语句的理解、索引设计的合理性以及根据数据量和查询模式选择合适的索引使用策略。在...

    面试mysql 之索引 锁 事物

    ### MySQL索引、锁与事务详解 #### 一、索引 **索引定义与作用:** 索引是一种数据结构,用于加速数据检索的过程。它通过建立数据表中某些列的值与行的位置之间的映射关系,使得数据库系统能够快速定位到所需的...

Global site tag (gtag.js) - Google Analytics