`

mysql索引总结

阅读更多
问题1:mysql索引类型normal,unique,full text的区别是什么?

normal:表示普通索引

unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique

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



问题2:在实际操作过程中,应该选取表中哪些字段作为索引?

为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引,有7大原则:

1.选择唯一性索引
2.为经常需要排序、分组和联合操作的字段建立索引
3.为常作为查询条件的字段建立索引
4.限制索引的数目
5.尽量使用数据量少的索引
6.尽量使用前缀来索引
7.删除不再使用或者很少使用的索引


Mysql中的Btree与Hash索引比较

投稿:junjie 字体:[增加 减小] 类型:转载 时间:2015-03-20 我要评论
这篇文章主要介绍了Mysql中的Btree与Hash索引比较,本文起讲解了B-Tree 索引特征、Hash 索引特征等内容,需要的朋友可以参考下
mysql最常用的索引结构是btree(O(log(n))),但是总有一些情况下我们为了更好的性能希望能使用别的类型的索引。hash就是其中一种选择,例如我们在通过用户名检索用户id的时候,他们总是一对一的关系,用到的操作符只是=而已,假如使用hash作为索引数据结构的话,时间复杂度可以降到O(1)。不幸的是,目前的mysql版本(5.6)中,hash只支持MEMORY和NDB两种引擎,而我们最常用的INNODB和MYISAM都不支持hash类型的索引。
不管怎样,还是要了解一下这两种索引的区别,下面翻译自mysql官网文档中对这两者的解释。
B-Tree 索引特征
B-Tree索引可以被用在像=,>,>=,<,<=和BETWEEN这些比较操作符上。而且还可以用于LIKE操作符,只要它的查询条件是一个不以通配符开头的常量。像下面的语句就可以使用索引:
复制代码 代码如下:

SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick%';
SELECT * FROM tbl_name WHERE key_col LIKE 'Pat%_ck%';
下面这两种情况不会使用索引:
复制代码 代码如下:

SELECT * FROM tbl_name WHERE key_col LIKE '%Patrick%';
SELECT * FROM tbl_name WHERE key_col LIKE other_col;
第一条是因为它以通配符开头,第二条是因为没有使用常量。
假如你使用... LIKE '%string%'而且string超过三个字符,MYSQL使用Turbo Boyer-Moore algorithm算法来初始化查询表达式,然后用这个表达式来让查询更迅速。
一个这样的查询col_name IS NULL是可以使用col_name的索引的。
任何一个没有覆盖所有WHERE中AND级别条件的索引是不会被使用的。也就是说,要使用一个索引,这个索引中的第一列需要在每个AND组中出现。
下面的WHERE条件会使用索引:
复制代码 代码如下:

... WHERE index_part1=1 AND index_part2=2 AND other_column=3
    /* index = 1 OR index = 2 */
... WHERE index=1 OR A=10 AND index=2
    /* 优化成 "index_part1='hello'" */
... WHERE index_part1='hello' AND index_part3=5
    /* 可以使用 index1 的索引但是不会使用 index2 和 index3 */
... WHERE index1=1 AND index2=2 OR index1=3 AND index3=3;
下面的WHERE条件不会使用索引:
复制代码 代码如下:

    /* index_part1 没有被使用到 */
... WHERE index_part2=1 AND index_part3=2
    /* 索引 index 没有出现在每个 where 子句中 */
... WHERE index=1 OR A=10
    /* 没有索引覆盖所有列 */
... WHERE index_part1=1 OR index_part2=10
有时候mysql不会使用索引,即使这个在可用的情况下。例如当mysql预估使用索引会读取大部分的行数据时。(在这种情况下,一次全表扫描可能比使用索引更快,因为它需要更少的检索)。然而,假如语句中使用LIMIT来限定返回的行数,mysql则会使用索引。因为当结果行数较少的情况下使用索引的效率会更高。
Hash 索引特征
Hash类型的索引有一些区别于以上所述的特征:
1.它们只能用于对等比较,例如=和<=>操作符(但是快很多)。它们不能被用于像<这样的范围查询条件。假如系统只需要使用像“键值对”的这样的存储结构,尽量使用hash类型索引。
2.优化器不能用hash索引来为ORDER BY操作符加速。(这类索引不能被用于搜索下一个次序的值)
3.mysql不能判断出两个值之间有多少条数据(这需要使用范围查询操作符来决定使用哪个索引)。假如你将一个MyISAM表转为一个依靠hash索引的MEMORY表,可能会影响一些语句(的性能)。
4.只有完整的键才能被用于搜索一行数据。(假如用B-tree索引,任何一个键的片段都可以用于查找。我觉得可能意味着带通配符LIKE操作符会不起作用)。
后记
分享到:
评论

相关推荐

    一套MySQL索引总结就够了

    一套有深度的SQL索引总结

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

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。这篇文章主要介绍了详解mysql索引总结----mysql索引类型以及创建,有兴趣的可以了解一下。

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

    关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能...

    MYSQL数据库 索引总结.xmind

    MYSQL数据库 索引章节内容大纲总结思维导图

    MySQL唯一索引重复插入数据解决方案总结.docx

    MySQL唯一索引重复插入数据解决方案总结.docx

    mysql实验报告+-+索引的创建与管理

    索引的创建与管理 Navicat Premium 12 mysql

    MySQL知识总结思维导图

    MySQL知识总结思维导图,压缩包内包含MySQL数据库基础、MySQL库的操作、MySQL表的操作(DDL)、MySQL数据类型、MySQL表的约束、MySQL基本查询(DML)、MySQL内置函数、MySQL复合查询、MySQL内外连接、MySQL索引特性...

    MySQL的索引.pptx

    MySql索引的精心总结-ppt-即下即用-免费下载

    Mysql(索引结构/事务/锁/MVCC/BufferPool/优化)总结

    对Mysql(索引结构/事务/锁/MVCC/BufferPool/优化)总结,包括重要知识点与面试点,xmind源文件

    SQL视图与索引总结

    区分视图与索引(1) 创建视图:(以SQL语句) create view v_GoodsInfo_ClassName_UnitName [with encryption--对CREATE VIEW语句文本的项进行加密] as select GoodsID 商品编号,ClassName 类别名,Price 价格,StoreNum ...

    MySQL索引类型总结和使用技巧以及注意事项

    在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表: ...时,如果在username上已经建立了索引,MySQL无须任何扫描,即准确可找到该记录。相反,MySQL会扫描所有记录,即要查询

    导致MySQL索引失效的一些常见写法总结

    主要给大家介绍了关于导致MySQL索引失效的一些常见写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    理解MySQL——索引与优化总结

    本篇文章主要介绍了MySQL——索引与优化,索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点。有兴趣的可以了解一下。

    MySQL训练营视频.zip

    │ day2_MySQL索引深入剖析-笔记.pdf │ day2_MySQL索引深入剖析-课件.mp4 │ day2_MySQL索引深入剖析-课件.pdf │ day3_MySQL事务与锁详解-笔记.pdf │ day3_MySQL事务与锁详解-课件.pdf │ day3_MySQL事务与锁详解...

    7.MySQL 索引.xmind(mysql)

    个人总结的MYSQL总结,希望对您有到帮助。

    MySQL索引建立选择和常见失效原因总结,这些你都得知道

    MySql性能优化之JOIN连接(有图,最全,最详细) 数据库索引(Index)实现原理,面试官常问~~~ 索引建立选择 适合建立索引 主键自动建立唯一索引( primary) 频繁作为查询条件的字段应该创建索引 (比如银行系统银行...

    数据库索引总结.xmind

    数据库索引总结,索引的作用?索引的注意事项?数据库索引的结构?

    MySql索引算法原理解析

    百度去查,但发现好多说得太复杂不好理解,结合各个文章总结一下(建议大概看文字,不理解不要紧,然后再看图的执行步骤然后在结合文字,这样一切就清晰好多)B-tree,B是balance,一般用于数据库的索引。...

    MySQL总结.xmind

    用了将近一周的时间对mysql进行了初步的学习,总结成思维导图,主要内容包括有基本使用,查询,与python的交互,事务,视图,索引,账户管理,主从同步配置等内容。

Global site tag (gtag.js) - Google Analytics