mysql索引小记

Mysql索引分为以下几类:FULLTEXT, HASH,BTREE,RTREE.

FULLTEXT:全文搜索索引

主要是解决‘ad%‘这样的查询效率低的问题,只能是MyISAM和InnoDB引擎上使用

HASH:哈希索引

哈希索引与B索引的区别

1:hash索引只能进行等值过虑,不能进行范围查询.这是因为hash索引是基于hash算法的

2:hash索引无法被用来避免数据的排序操作.

3:hash索引不能利用部分索引键进行查询.

4:hash索引无法避免对表的扫描.因为多个行会对应同一个hash值,所以定位到hash值之后要

对相应的表进行对比

5:当hash冲突比较多时,效率会下降.可能会比b索引还要低

BTREE:树索引

基于树结构的索引,会从根节点开始查询

索引使用时的一些注意事项

1.索引不会包涵有NULL值的列

如果一列中有NULL值,那么在创建复合索引的时候有NULL值的一列是会失效的

2.使用短索引

如果对字符类型的列进行创建索引的时候,最好指定长度.比较VARCHAR(20),如果列中的数据

在前10或20位就能确定唯一性,就没有必要对整个列进行索引.短索引可以提高查询效率,节省存储

空间和I/O操作

3.索引列排序

在一条查询语句中只会使用一条索引,如果where中使用了索引,那么order中将不会使用索引.

所以尽量避免没有必要的排序

4.like语句

尽量避免使用like语句.在like语句中%AD%或_ad,以%和_形头的查询是会让索引失效的

sdf%这样的不会使索引失效

5.不要在列上进行运算

6.不要使用not in和<>

直引虽然会提高查询效率,但是如果对表创建过多索引则会降低更新效率

时间: 2024-12-05 11:01:14

mysql索引小记的相关文章

Mysql优化小记1

在项目开发中,需要写个windows服务从sqlserver复制数据到mysql(5.6.13 Win64(x86_64)),然后对这些数据进行计算分析.每15分钟复制一次,每次复制大概200条数据,每隔1小时对新同步的数据进行计算. 我们的mysql服务器是个破台式机,如下:(最初4G内存) 随着时间推移,数据量不断增加,目前数据表有7295400条数据.眼看着同步数据耗时越来越长,从最初的10秒左右,到目前的7,8分钟,有时更甚达到十几分钟.计算服务耗时从最初的几分钟到目前的40多分钟.磁盘

MySQL索引基本应用[转]

原文地址:http://www.php100.com/html/webkaifa/database/Mysql/2010/0409/4279.html 索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT N

深入浅出分析MySQL索引设计背后的数据结构

在我们公司的DB规范中,明确规定: 1.建表语句必须明确指定主键 2.无特殊情况,主键必须单调递增 对于这项规定,很多研发小伙伴不理解.本文就来深入简出地分析MySQL索引设计背后的数据结构和算法,从而可以帮你释疑如下问题: 1.为什么innodb表需要主键? 2.为什么建议innodb表主键是单调递增? 3.为什么不建议innodb表主键设置过长? B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构.使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.B通常

mysql索引介绍

在数据表中对字段建立索引将大大提高查询的速度: 例如:select * from mytable where username='admin' 如果在列username上建立了索引,只需要一次就可以找到该记录 一.mysql索引的类型: 1.普通索引 创建:create index indexname on mytable(username) 删除:drop index [indexname] on mytable 2.唯一索引 特点:索引列值必须唯一,但允许有null值 创建:create u

mysql索引总结----mysql 索引类型以及创建

关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢.还是以WordPress来说,其多个数据表都会对经常被查询的字段添加索引,比如wp_comments表中针对5个字段设计了BTREE索引. 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条

MySQL索引

mysql索引  注意:创建索引的基本原则   索引要建在使用比较多的字段上   尽量不要在相同值比较多的列建立索引,比如性别.年龄等字段   对于经常进行数据存取的列不要建立索引   对于有外键引用的表,在主键和外键上建立索引   1.普通索引 索引创建的三种方式===== 主键是一种特殊索引 表已创建  ===help create index; create index ipaddr_idx on test(ipaddr); mysql> create index ipaddr_idx o

mysql 索引和查询优化

对于任何DBMS,索引都是进行优化的最主要的因素.对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降.如果对多列进行索引(组合索引),列的顺序非常重要,MySQL仅能对索引最左边的前缀进行有效的查找. 例如:假 设存在组合索引it1c1c2(c1,c2),查询语句select * from t1 where c1=1 and c2=2能够使用该索引.查询语句select * from t1 where c1=1也能够使用该索引.但是,查询语句select * f

[转载]MySQL索引原理与慢查询优化

好文,以防丢失,故转之,另对排版做简单优化.原文地址:http://ourmysql.com/archives/1401 索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查"mysql"这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql.如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者w开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成? 索引原理 除了词典,生活中随处可见索引的例子,如火车站的

MySQL索引使用方法和性能优化

关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢.还是以WordPress来说,其多个数据表都会对经常被查询的字段添加索引,比如wp_comments表中针对5个字段设计了BTREE索引. 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条