MySQL索引类型总结和使用技巧及注意事项
在数据库中的表、索引字段可以大大提高查询速度。如果我们创建了一个表表:复制代码代码如下:创建表的表(ID为不空,不空用户名varchar(16));
我们随机插入10000条记录,其中一条是5555,admin。
当寻找用户名为adminSELECT * FROM mytable么= 'admin记录,如果指数一直在建立MySQL用户名,找不到任何记录没有任何扫描,即可以准确地找到。相反,MySQL会扫描所有记录,即查询10000条记录。
索引分为单列索引和组合索引。一个索引,即一个索引只包含一个列,一个表可以有多个单列索引,但这不是一个复合索引。
MySQL索引类型包括:
一、普通指标
这是最基本的索引,它没有任何限制:
1。创建一个索引
复制代码代码如下:创建表索引(用户名(长度));
如果是char、varchar类型,长度可以小于字段的实际长度;如果是BLOB和文本类型,您必须指定长度相同。
2。修改表的结构
复制代码代码如下所示:
修改表添加索引{ }对indexname(用户名(长度))——直接指定在创建表时
创建表的表(ID为不空,不空用户名varchar(16),指数)));
-删除索引的语法:
索引表indexname } {;
二、唯一索引
它类似于以前的普通索引,它不同:索引列的值必须是唯一的,但是允许有一个空值。如果它是一个复合索引,列值的组合必须是唯一的:
复制代码如下:创建唯一索引表(用户名(长度))
-修改表的结构
修改表添加独特的{ }对indexname(用户名(长度))
-当创建表时,直接指定
创建表的表(ID为不空,不空用户名varchar(16),独特的)));
三。主要的关键指标
它是一个特殊的唯一索引,不允许有空值。当表生成时,主索引是同时创建的。
复制代码如下:创建表的表(ID为不空,不空用户名varchar(16),原发性);
当然,你也可以使用修改命令。记住:一个表只能有一个主键。
四。综合指数
向表中添加多个字段,以便比较单列索引和图像中的组合索引:
复制代码代码如下:创建表的表(ID为不空,用户名varchar(16)不为空,VARCHAR 50(用户名)。
为了进一步提取MySQL的效率,应该考虑组合索引,即将名称、城市、年龄划分为索引。
复制代码代码如下:ALTER TABLE表添加索引name_city_age(名称(10)、城市、年龄){代码}。
在建立表的时候,对usernname长度是16,10是用在这里。这是因为在一般情况下,名称的长度不能超过10,这将加快索引查询,减少索引文件的大小,提高插入更新速度。
如果你设置了单列索引usernname,城市和年龄,桌上有3个列的索引,和查询效率会从上面提到的那些非常不同,这远远低于我们的综合指标。虽然有三个指标在这个时候,MySQL只能使用其中一个似乎是最有效的单一列索引。
这样一个综合指数的建立实际上相当于下列三套综合指数的建立:
为什么usernname,城市,年龄usernname,市usernname没有组合指标如城市,年龄这是MySQL复合索引的最左边前缀的结果。简单的理解仅来自组合开头的左边。不是所有包含三列的查询都将用于复合索引,下面的SQL将使用组合索引:
{代码}
SELECT * FROM mytable whree用户名为admin和城市郑州SELECT * FROM mytable whree
接下来的几个没有使用:
复制代码代码如下所示:
SELECT * FROM mytable whree年龄= 20 =郑州市SELECT * FROM mytable whree市=郑州
五。建立索引的时间
我们已经学会了在这里索引,那么我们需要在哪里建立索引呢一般来说,出现在哪里和连接的列中需要建立索引,但这并不总是正确的,因为只有在mysql上、在、之间、、或有时会使用索引:
复制代码如下:选择T的名字从mytable表M T左连接t.name = m.username哪里。
城市和时代需要索引,此时,在mytable表userame出现在加入条款,它是必要的指标。
我刚才提到,只有一些时候需要索引。因为通配符和_ %在开始查询,MySQL将不使用索引。例如,下句使用索引:
复制代码代码如下所示:
SELECT * FROM mytable,用户名like'admin %
下一句将不会被使用。
复制代码如下:SELECT * FROM mytable wheret名称是管理
因此,在使用时应注意上述差异。
六。指数的不足之处
这些都是关于使用索引的优势,但是过多的使用索引会导致滥用,因此,索引也有它的缺点:
1。虽然索引极大地提高了查询速度,但它减少了更新表的速度,比如表的插入、更新和删除,因为更新表,MySQL不仅保存数据,而且还保存索引文件。
2。索引将占用磁盘空间。一般来说,这个问题不是很严重,但是如果在一个大表上创建各种复合索引,索引文件将迅速扩展。
索引只是提高效率的一个因素。如果MySQL具有大数据表,则需要花时间学习和构建最佳索引或优化查询语句。
七。索引注释的使用
使用索引时,有以下一些提示和技巧:
1。索引不包含具有空值的列。
只要列包含空值,它们将不包含在索引中。如果一列包含null值,则此列对这个复合索引无效。因此,在设计数据库时,我们不允许字段的默认值为空。
2。使用短索引
索引字符串,如果您可以指定前缀长度。例如,如果有一个char(255)列,如果该数字在前10个或20个字符中是唯一的,则整个列没有索引。短索引不仅可以提高查询速度,而且可以节省磁盘空间和I/O操作。
三.索引列排序
MySQL查询只使用一个索引,因此如果索引在WHERE子句中已经被使用,那么顺序中的列没有索引。因此,数据库默认排序在满足需求时不能使用排序操作,并且尽量不包含多列排序。如果需要,最好为这些列创建复合索引。
4.like语句操作
一般情况下,不鼓励操作,如果不使用,则如何使用它也是一个问题。
5。不要在列上执行操作。
复制代码代码如下所示:
从users年(adddate)<2007;
该操作将在每行执行,这将导致索引失败执行一个完整的表扫描,因此我们可以将其更改为:
复制代码代码如下:从users adddate <2007-01-01;
6。不要使用不和>操作。
上面介绍了mysql索引类型,希望能对您有所帮助。