精华内容
下载资源
问答
  • 索引的作用

    2021-01-04 18:15:06
    a. 索引就一种特殊查询表,数据库搜索引擎可以利用它加速对数据检索。...c. 索引可以是唯一的,创建索引允许指定单个列或者多个列。 d. 缺点它减慢了数据录入速度,同时也增加了数据库尺寸大小 ...

    a. 索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。
    b. 它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。
    c. 索引可以是唯一的,创建索引允许指定单个列或者是多个列。
    d. 缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小

    展开全文
  • MySQL复合唯一索引分析关于复合唯一索引(unique key 或 unique index),网上搜索不少人说:”这种索引起到关键作用是约束,查询时性能上没有得到提高或者查询时根本没有走索引列“。也有人说:“查询时使用到了...

    MySQL复合唯一索引分析

    关于复合唯一索引(unique key 或 unique index),网上搜索不少人说:”这种索引起到的关键作用是约束,查询时性能上没有得到提高或者查询时根本没有走索引列“。也有人说:“查询时使用到了索引和普通索引一样“。那么问题到底是怎样的呢?

    测试准备工作

    准备建表语句,插入数据等工作:

    -- 建表(注:a,b是复合唯一索引)

    create table test0(id bigint not null primary key auto_increment, a varchar(10) not null, b varchar(10) not null, unique index(a, b))engine=innodb charset=utf8 auto_increment=1;

    -- 插入数据

    insert into test0(a, b)values('china', 'chinese');

    insert into test0(a, b)values('japan', 'japanese');

    insert into test0(a, b)values('germany', 'german');

    insert into test0(a, b)values('korea', 'korea');

    insert into test0(a, b)values('france', 'frence');

    insert into test0(a, b)values('australia', 'australia');

    insert into test0(a, b)values('america', 'american');

    insert into test0(a, b)values('brazil', 'brazil');

    -- 执行计划一(查询存在纪录)

    explain select * from test0 where a='france' and b='frence';

    -- 执行计划二(查询不存在纪录)

    explain select * from test0 where a='france' and b='america';

    执行计划一:

    0818b9ca8b590ca3270a3433284dd417.png

    执行计划二:

    0818b9ca8b590ca3270a3433284dd417.png

    综上可以看出:

    执行计划一,查询条件匹配时命中所有的索引;

    执行计划二,查询条件不匹配时没有命中索引,并返回一条Extra”Impossible WHERE noticed after reading const tables”

    那么到底这两次查询有什么不同呢?

    MySQL关于这种索引的执行计划以及优化方案是什么?

    我不得不把官方的Doc阅读一遍,关键点总结如下:

    Explain join types 执行计划”type”列表,从执行性能最好到最坏:

    1. system

    表中只有一行数据(=system table)。这是常数连接类型的特例。

    2. const

    在查询开始时读取表时仅有一行可以匹配的数据。因为仅匹配到一行数据,所以值列可以被认为是常数级优化。常数表查询非常快因为它们只读取一次就能命中。

    常数类型仅仅在匹配”PRIMARY KEY”或者”UNIQUE INDEX”所有的列值时才会被使用。

    下面的查询,表被当成常数表执行:

    -- query 1

    SELECT * FROM tbl_name WHERE primary_key=1;

    SELECT * FROM tbl_name WHERE primary_key_part1=1 AND primary_key_part2=2;

    ref

    所有带索引值匹配的行都从这张表读取各种组合的行从之前的表读取。如果连接使用key的只是最左前缀,或者key不是PRIMARY KEY和UNIQUE index使用ref(换句话说,如果连接跟进key值没有查询单行数据)。如果这个key值使用时匹配了仅仅少数的行,这就是一个比较好的类型。

    ref 可以用在索引列,条件匹配时使用”=” 或者 “<=>”操作。下面的示例,MySQL 能够使用ref连接处理 ref_table:

    SELECT * FROM ref_table WHERE key_column=expr;

    SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column;

    SELECT * FROM ref_table,other_table WHERE ref_table.key_column_part1=other_table.column AND ref_table.key_column_part2=1;

    ref_or_null

    这种连接有点类似于ref, 但是查询行包含NULL值时,MySQL会作额外的查询。这种连接类型的优化最经常在解决子查询的时候使用。下面的例子,MySQL会使用ref_or_nulll连接处理ref_table:

    SELECT * FROM ref_table WHERE key_column=expr OR key_column IS NULL;

    参见 8.2.1.6, “IS NULL 优化”.

    index_merge

    这种连接类型说明已经启用索引合并优化。这种场景下,输出行中的key列包含用于索引的列表,并且key_len显示索引使用的最长key parts。更多信息参见“索引合并优化”。

    range

    只有当行根据给定范围检索到时,使用一个索引查询这些行。输出行的key列表明使用哪个索引。key_len列显示使用最长的key part。这种连接ref列为NULL。

    当key列和一个常量使用”=”, “<>”, “>”, “>=”, “”, BETWEEN, 或者IN()比较时使用range连接:

    SELECT * FROM tbl_name WHERE key_column = 10;

    SELECT * FROM tbl_name WHERE key_column BETWEEN 10 and 20;

    SELECT * FROM tbl_name WHERE key_column IN (10,20,30);

    SELECT * FROM tbl_name WHERE key_part1 = 10 AND key_part2 IN (10,20,30);

    index

    索引连接类型和ALL一样,除了扫描索引树。两种执行方式:

    如果索引在查询里是一个覆盖性的索引,并且能够查询表中所有满足的数据,只有索引树被扫描。这种场景下,Extra列会显示”Using index”。通常只走索引扫描比全表扫描要快很多,因为索引的数量通常比表中的数据量要少很多。全表扫描优化方案是通过读取索引并按照索引顺序检索数据。使用索引不会在Etra列显示。列使用单一索引时,MySQL使用这种连接类型。

    ALL

    全表扫描。通常,应该通过添加索引避免全表扫描。

    EXPLAIN Extra Information

    The Extra column of EXPLAIN output contains additional information about how MySQL resolves the query. The following list explains the values that can appear in this column. If you want to make your queries as fast as possible, look out for Extra values of Using filesort and Using temporary.

    1. Child of 'table' pushed join@1

    This table is referenced as the child of table in a join that can be pushed down to the NDB kernel. Applies only in MySQL Cluster NDB 7.2 and later, when pushed-down joins are enabled. See the description of the ndb_join_pushdown server system variable for more information and examples.

    2. const row not found

    For a query such as SELECT ... FROM tbl_name, the table was empty.

    3. Distinct

    MySQL is looking for distinct values, so it stops searching for more rows for the current row combination after it has found the first matching row.

    4. Full scan on NULL key

    This occurs for subquery optimization as a fallback strategy when the optimizer cannot use an index-lookup access method.

    5. Impossible HAVING

    The HAVING clause is always false and cannot select any rows.

    6. Impossible WHERE

    The WHERE clause is always false and cannot select any rows.

    Impossible WHERE noticed after reading const tables

    MySQL has read all const (and system) tables and notice that the WHERE clause is always false.

    展开全文
  • 定义主键和外键主要为了维护关系数据库的完整性,总结一下: 1.主键能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。 身份证号是唯一能确定你这个人的,其他都可能...索引的作用相当于图书...

    定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
    1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。

    身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 
    2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

    比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

    索引的作用:
    索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容,提高性能(查询速度)。
    索引的优缺点?
    优点:
    1.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
    2.可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
    3.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
    4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
    5.通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

    缺点:
    1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
    2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚集索引那么需要的空间就会更大。
    3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

    因为索引非常占内存,所以索引也需要谨慎添加,哪些字段需要索引。
     

     

    展开全文
  • 索引的作用?和它的优点缺点什么? a. 索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。 b. 它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。 c. 索引可以是唯一...
    1. 索引的作用?和它的优点缺点是什么?
      a. 索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。
      b. 它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。
      c. 索引可以是唯一的,创建索引允许指定单个列或者是多个列。
      d. 缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小
    展开全文
  • a.索引就一种特殊查询表,数据库搜索引擎可以利用它加速对数据检索。...索引可以是唯一的,创建索引允许指定单个列或者多个列。 d.缺点它减慢了数据录入速度,同时也增加了数据库尺寸大小 ...
  • 定义主键和外键主要为了维护关系数据库的完整性,总结一下:1.主键能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。...索引的作用:索引的作用相当于图书的目录,可以根据目录...
  • a. 索引就一种特殊查询表,数据库搜索引擎可以利用它加速对数据检索。...c. 索引可以是唯一的,创建索引允许指定单个列或者多个列。 d. 缺点它减慢了数据录入速度,同时也增加了数据库尺寸大小 ...
  • 2、可以大大加快数据的检索速度,这也创建索引的最主要的原因。3、可以加速表和表之间的连接,特别在实现数据的参考完整性方面特别有意义。4、在使用分组和排序 子句进行数据检索时,同样可以显著减...
  • INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是一样的。索引名:可选。给创建的索引取一个新名称。字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。长度:可选。指索引的长度,...
  • Oracle索引的使用

    2013-07-23 20:33:00
    最近做数据整合,把其他服务器上数据抽取到统一数据库中,为提高速度,考虑采用索引。 网络上搜取到资料如下,...a) 唯一索引, 作用是数据约束,保证数据唯一,还有就是数据索引,提高查询效率 b)一般索引...
  • 索引应用

    2011-07-11 15:02:37
    a) 唯一索引, 作用是数据约束,保证数据唯一,还有就是数据索引,提高查询效率 b)一般索引,只有数据索引的作用,   2.唯一索引的建立 create unique index 索引名 on 表名(字段名) ok,假设有一个Emploeyy表...
  • 索引:好处查询速度快,被删除,修改,不会对表产生影响,作用是加速查询; 一种典型数据库对象 作用:提交数据查询效率,尤其对一些数据量很大索引是用来为表服务 索引是oracle服务器自动来使用(索引...
  •  a) 唯一索引, 作用是数据约束,保证数据唯一,还有就是数据索引,提高查询效率  b)一般索引,只有数据索引的作用, 2.唯一索引的建立  create unique index 索引名 on 表名(字段名) ok,假设有一个Emploeyy...
  • MongoDB索引Index

    2020-09-25 09:30:37
    索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。索引目标提高数据库的查询效率,没有索引的话,查询会进行全表扫描(scan every document in a collection),数据量大时严重降低了查询效率...
  • oracle之索引

    2010-03-23 10:08:00
    1.索引分类a) 唯一索引, 作用是数据约束,保证数据唯一,还有就是数据索引,提高查询效率b)一般索引,只有数据索引的作用, 2.唯一索引的建立create unique index 索引名 on 表名(字段名)ok,假设有一个Emploeyy表...
  • oracle索引介绍

    2011-11-16 21:15:25
     a) 唯一索引, 作用是数据约束,保证数据唯一,还有就是数据索引,提高查询效率  b)一般索引,只有数据索引的作用,  2.唯一索引的建立  create unique index 索引名 on 表名(字段名)  ...
  • MySQL索引学习

    2020-06-30 09:27:55
    最近,在项目中要对一个mysql表建立唯一索引,但是发生了一系列自己意料之外现象,因此趁机巩固下mysql索引相关知识。 1. 唯一性约束不起作用 首先,本文中所用mysql版本5.7.14: select version(); 得到...
  • MySQL 索引分析

    2018-06-08 10:33:00
    关于复合唯一索引(unique key 或 unique index),网上搜索不少人说:”这种索引起到关键作用是约束,查询时性能上没有得到提高或者查询时根本没有走索引列“。也有人说:“查询时使用到了索引和普通索引一样“。...
  • 索引可以理解为新华字典目录, 作用是 大大大提高查询效率. 1.2.常见索引: 主索引(主键 primary key) 唯一索引(唯一键 unique key) 普通索引(普通键 key) 全文索引(fulltext) 1.3.语法: explain select查询语句; ...
  • 1.索引的作用——索引可很大程度上提高检索数据的速度(包括多表连接查询、分组和排序) 2.索引的原理——在已排序的索引数据段中进行高速检索->根据索引叶节点中保存的rowid从表中获取数据行 3.索引的分类  a....
  • a) 唯一索引, 作用是数据约束,保证数据唯一,还有就是数据索引,提高查询效率 b)一般索引,只有数据索引的作用, 2.唯一索引的建立 create unique index 索引名 on 表名(字段名) ok,假设有一个Emploeyy表

空空如也

空空如也

1 2 3 4 5
收藏数 84
精华内容 33
关键字:

唯一索引的作用是a