当前位置:首页 > 日记 > 正文

mysql索引的详细介绍

mysql索引的详细介绍
MySQL索引概述

所有的MySQL的列类型可以被索引,使用索引的相关栏目是提高选择操作性能的最佳途径。根据每个表的存储引擎的最大指数和最大长度指标的定义,所有的存储引擎支持至少16个指标每桌,至少有256个字节的总指数。大多数存储引擎有较高的限制。

在MySQL 5.1中,MyISAM和InnoDB表前缀可以达到1000字节。请注意,前缀的限制应以字节计量,并在创建表的语句被解释为字符数前缀长度。当前缀长度是使用多字节字符集的列指定的,它是必要的考虑前缀长度。

你也可以创建一个全文索引,索引可以用于全文本搜索。只有MyISAM存储引擎支持全文索引,只为char、varchar、和文本列。指标总是在整体柱和不支持本地(前缀)指标。您还可以创建对空间的柱型指标。只有MyISAM存储引擎支持的空间类型,采用R树空间索引,默认内存(堆)存储引擎使用哈希索引,但是它也支持B树索引。

设计指标原则

1)搜索的索引列不一定是要选择的列。

换句话说,最合适的索引列是WHERE子句中出现的列,或在连接子句中指定的列,而不是SELECT关键字之后的SELECT列表中的列。

2)使用唯一索引。

Consider the distribution of the middle value of a column.For a column with a unique value, the index has the best effect, and a column with multiple repeats has the worst index.For example, the age column has different values and is easy to distinguish between the lines.The columns used to record sex only contain M and F, so indexing this column is not very useful.

3)使用短索引。

如果字符串的索引,你应该指定一个前缀长度,应该做的事,只要它是可能的。例如,如果有一个char(200)列,如果在前10或20个字符是独特的,那么整个柱没有索引。索引前10或20个字符可以节省大量的指数空间,也可以使查询更快,更小的指标涉及较少的磁盘I / O,和较短的值比较快。更重要的是,对于较短的键值,在索引缓存块可以容纳更多的核心价值,所以MySQL也可以容纳更多的价值,这增加了的记忆。不读书的指标多块找到行的可能性。(当然,我们应该利用一些常识。这是不可能的索引与列值的第一个字符,因为索引中没有很多不同的值。

4)使用最左前缀。

创建一个n列的索引时,它实际上是一个指标,可对MySQL的创作。多列索引可以因为套在索引列的最左端可以用于匹配的行数指标发挥作用。这样的集合称为(最左前缀。这是不同于一个索引列的前缀索引列的前缀是用前n个字符的索引的索引值。)

5)不要过度索引。

不要认为越多越好的指数,该指数是错误的。每个额外的索引占用额外的磁盘空间,并降低写操作的性能,我们已经介绍了。当一个表的内容被修改,索引必须更新,有时可能需要重构,因此更多的指标,它不再需要。如果一个指标是很少使用或不使用,它不需要放慢速度表的变化速度。此外,它需要时间来考虑各种指标当MySQL生成执行计划。创建冗余指标带来了更多的工作,太多的索引查询优化。不可能让MySQL选择最好的指标使用。只有保持必要的指标是有益的To查询优化。如果要在索引表中添加索引,则应考虑添加的索引是否是现有多列索引的最左索引。如果是,不要费心增加索引,因为它已经有了索引。

6)考虑列上进行比较的类型。

该指标可用于=、>和操作。当模式有直接的前缀,该指数也用在像操作。如果只有一列是用于其他类型的操作,如strcmp(),它是不是有价值的指标。

B树索引和哈希索引

对于B树和哈希索引,当使用=,,为空或不空算子,关键元素和常量值的比较关系对应于一系列条件。有了哈希索引的另外一些特点:他们仅用于=或算子的等式(但很快),优化器不能使用哈希索引加快了运行秩序。(这类指标不能用于搜索其次录入)。MySQL不知道多少行两个值之间(这是用来确定哪些指标是由范围优化器使用)。如果你改变MyISAM表的哈希索引的存储表,会影响一些查询。整个关键字只能用于搜索线。(与B树索引,LEftmost前缀任何关键字可以用来找到一行)。

For BTREE index, when using >, =, or LIKE'pattern'(where'pattern' does not start with wildcards) operator, the comparison relation between key elements and constant values corresponds to a range condition.Constant values refer to the constants in the query string, the columns in const or system tables in the same connection, the results of irrelevant sub queries, and the expressions which are composed entirely of the preceding subexpressions.

以下是WHERE子句中范围条件查询的示例。

下列范围查询适合B树索引和哈希索引:

复制代码代码如下:SELECT * FROM T1,key_col = 1或key_col在(15,18,20);

下列范围查询适用于btree索引

复制代码代码如下:SELECT * FROM T1,key_col > 1和key_col<10;

SELECT * FROM T1,key_col like'ab %或key_col between'bar;

MySQL如何使用索引

索引用于快速找到线已列中的特定值,而不使用索引,MySQL必须从第一个记录开始读完整的表格到相关线路,表面积较大,它的时间就越长。如果表中查询列表中有一个索引,MySQL可以迅速达到一个要搜索的数据文件中的位置,也不需要看到所有的数据。如果一个表有1000行,它比顺序读至少快100倍。注意,如果你需要访问一个大的分支,顺序读快得多,因为在这一点上我们避免磁盘搜索。

大多数的MySQL索引(主键、唯一、指数和全文)存储在B树,R树用于空间列类型的指数,和内存表还支持哈希索引。

让我们看看数据库将使用什么条件索引,以及在什么情况下数据库将不使用索引来详细解释。请参阅优化章节的相关章节,这里不再疲倦。

相关文章

浅析MySQL替换的使用

浅析MySQL替换的使用

替换,电脑软件,MySQL,这可以在sql server中处理: 复制代码代码如下所示: 如果不存在(从T选择id为1的1) 插入T(ID,update_time)值(1,getdate()) 其他的 更新设置update_time = getdate(),ID = 1 那么MySQL是如何实现这种逻辑的呢不必担心,MySQL中有一个更简…

MySQL如何查询在一段时间内未售出

MySQL如何查询在一段时间内未售出

商品,查询,内未,电脑软件,MySQL,前端时间,室友带来一个关于MySQL查询的问题: 有3张桌子: 1、zd_product产品表zp_id主键(产品ID)inputtime(产品发布时间) 2、zd_order订单zp_id外键(产品ID)zo_id主键(ID)zo_voer_time(订单完成时间) 3、zd_ord_pro产…

如何找出隐藏在Win7的Windows邮件

如何找出隐藏在Win7的Windows邮件

邮件,电脑软件,Windows,点评:对于一个不熟悉的朋友用WIN7,你只能看到4找到Windows邮件隐藏在win7和需要的朋友分享它的小步骤 一种方法是简单的,它只需要4个小步骤找到Windows邮件隐藏在win7。很多朋友认为Windows邮件已被删除,在Win7,但它不是,…

在一些魔法的使用转移到提高工作效

在一些魔法的使用转移到提高工作效

债券,提高工作效率,魔法,转移到,电脑软件,点评:如果我们能将鼠标和键盘操作,一些捷径来按时完成工作的使用,提高效率仍然是非常有效的,一些神奇的介绍移动Windows7键,感兴趣的朋友可以参考 键盘和鼠标的操作效率不如触摸操作直观方便。但如果我…

ahqinit.exe的过程是怎样的是ahqin

ahqinit.exe的过程是怎样的是ahqin

的是,是怎样,过程,电脑软件,ahqinit,点评:ahqinit.exe是Sound Blaster声卡控制生活计划的一部分。它负责初始化audiohq拖放工具栏 进程文件:ahqinit或ahqinit.exe 进程名称:Soundblaster AHQInit 过程类别:安全风险的过程 英文描述: ahqinit.e…

对Oracle的NVL函数的使用介绍

对Oracle的NVL函数的使用介绍

函数,电脑软件,Oracle,NVL,Oracle NVL函数 NVL()函数 从两个表达式返回非空值。 语法 NVL(eexpression1,eexpression2) 参数 eexpression1,eexpression2 如果eexpression1的计算结果为null,然后NVL()返回eexpression2。如果eexpression1的计算…

MySQL5.0.45.(修改)拒绝服务漏洞

MySQL5.0.45.(修改)拒绝服务漏洞

拒绝服务,漏洞,修改,电脑软件,MySQL 5.0.45.(修改)拒绝服务漏洞 * * MySQL = 6可能受到影响 * Kristian Erik Hermansen *信用:Joe Gallo *您必须具有修改此漏洞的权限! *场景:您发现了SQL注入,但您想打后端服务器 *在坚果只是为了好玩。首先从更…

什么是RAR文件如何打开RAR文件

什么是RAR文件如何打开RAR文件

文件,电脑软件,RAR,核心提示:对于经常使用计算机的朋友来说,如何打开RAR文件更容易。如果你问一个电脑专家面前的RAR文件,有多少人会嘲笑你是菜鸟,但对于计算机初学者来说,RAR是一个文件可能不是真的,更不用说RAR了。 对于经常使用计算机的朋友来…

MySQL字符集与数据库引擎修改方法

MySQL字符集与数据库引擎修改方法

修改,字符集,数据库引擎,方法,电脑软件,mysql字符集:cp1252西欧(latin1)解决混沌编码问题 当你使用phpMyAdmin的虚拟主机空间来操作数据库,如果你看到MySQL字符集显示在phpMyAdmin的首页是cp1252西欧(latin1),当我们导入数据,会有乱码。 在phpMyAd…

添加一个打印服务器端口的局域网共

添加一个打印服务器端口的局域网共

局域网,打印服务器,端口,电脑软件,注释:您希望使用打印机服务器将打印机共享到局域网中。您只需将打印机端口改为标准的TCP/IP端口即可。具体步骤如下:不要错过你需要的朋友。 如果你的电脑已经被直接连接到打印机和打印的计算机上还安装了打…

如何在Win8系统的其他用户共享文件

如何在Win8系统的其他用户共享文件

共享文件,控制,系统,其他用户,如何在,一般注释:设置共享文件一般默认是只读的,另一种是通过共享的用户不能修改这个文件,如何实现其他用户共享文件的读写完整的控件,下面的设置方法 共享的文件通常默认为只读属性,也就是说,其他用户不能通过共享…

QQ搞笑个性签名:活得好,因为我们要死

QQ搞笑个性签名:活得好,因为我们要死

活得,很长时间,个性签名,搞笑,电脑软件,有多少孩子在考试中被杀,有多少诚实的孩子学会了作弊。 我是洋葱,车站路,我拿蘸酱,我叫他的祖宗。 好好活着,因为我们要死很久了。 从东到唐朝是我专程到Buddha qiuqin西。 三天注定,穿上七分。 想成…