精华内容
参与话题
问答
  • 创建一个多列索引: CREATE TABLE test (  id INT NOT NULL,  last_name CHAR(30) NOT NULL,  first_name CHAR(30) NOT NULL,  PRIMARY KEY (id),  INDEX name (last_name,first_nam
    创建一个多列索引:
    CREATE TABLE test (  
        id         INT NOT NULL,  
        last_name  CHAR(30) NOT NULL,  
        first_name CHAR(30) NOT NULL,  
        PRIMARY KEY (id),  
        INDEX name (last_name,first_name)  
    );  
    创建多个索引:
    CREATE TABLE test (  
        id         INT NOT NULL,  
        last_name  CHAR(30) NOT NULL,  
        first_name CHAR(30) NOT NULL,  
        PRIMARY KEY (id),  
        INDEX name (last_name),  
         INDEX_2 name (first_name)  
    );  
    当查询语句的条件中包含last_name 和 first_name时,
    例如:SELECT * FROM test WHERE last_name='Kun' AND first_name='Li';  
    sql会先过滤出last_name符合条件的记录,在其基础上再过滤first_name符合条件的记录。那如果我们分别在last_name和first_name上创建两个列索引,mysql的处理方式就不一样了,它会选择一个最严格的索引来进行检索,可以理解为检索能力最强的那个索引来检索,另外一个利用不上了,这样效果就不如多列索引了。
    但是多列索引的利用也是需要条件的,以下形式的查询语句能够利用上多列索引:
    SELECT * FROM test WHERE last_name='Widenius';
    SELECT * FROM test WHERE last_name='Widenius' AND first_name='Michael';
    SELECT * FROM test WHERE last_name='Widenius' AND (first_name='Michael' OR first_name='Monty');
    SELECT * FROM test WHERE last_name='Widenius' AND first_name >='M' AND first_name < 'N';
    以下形式的查询语句利用不上多列索引:
    SELECT * FROM test WHERE first_name='Michael';
    SELECT * FROM test WHERE last_name='Widenius' OR first_name='Michael';
    多列建索引比对每个列分别建索引更有优势,因为索引建立得越多就越占磁盘空间,在更新数据的时候速度会更慢。另外建立多列索引时,顺序也是需要注意的,应该将严格的索引放在前面,这样筛选的力度会更大,效率更高。
     
    持续学习、持续收获才能带来持续的满足和快乐!
    展开全文
  • 创建一个多列索引: CREATE TABLE test (  id INT NOT NULL,  last_name CHAR(30) NOT NULL,  first_name CHAR(30) NOT NULL,  PRIMARY KEY (id),  INDEX name (last_name,first_nam
    创建一个多列索引:
    CREATE TABLE test (  
        id         INT NOT NULL,  
        last_name  CHAR(30) NOT NULL,  
        first_name CHAR(30) NOT NULL,  
        PRIMARY KEY (id),  
        INDEX name (last_name,first_name)  
    );  
    创建多个索引:
    CREATE TABLE test (  
        id         INT NOT NULL,  
        last_name  CHAR(30) NOT NULL,  
        first_name CHAR(30) NOT NULL,  
        PRIMARY KEY (id),  
        INDEX name (last_name),  
         INDEX_2 name (first_name)  
    );  
    当查询语句的条件中包含last_name 和 first_name时,
    例如:SELECT * FROM test WHERE last_name='Kun' AND first_name='Li';  
    sql会先过滤出last_name符合条件的记录,在其基础上再过滤first_name符合条件的记录。那如果我们分别在last_name和first_name上创建两个列索引,mysql的处理方式就不一样了,它会选择一个最严格的索引来进行检索,可以理解为检索能力最强的那个索引来检索,另外一个利用不上了,这样效果就不如多列索引了。
    但是多列索引的利用也是需要条件的,以下形式的查询语句能够利用上多列索引:
    SELECT * FROM test WHERE last_name='Widenius';
    SELECT * FROM test WHERE last_name='Widenius' AND first_name='Michael';
    SELECT * FROM test WHERE last_name='Widenius' AND (first_name='Michael' OR first_name='Monty');
    SELECT * FROM test WHERE last_name='Widenius' AND first_name >='M' AND first_name < 'N';
    以下形式的查询语句利用不上多列索引:
    SELECT * FROM test WHERE first_name='Michael';
    SELECT * FROM test WHERE last_name='Widenius' OR first_name='Michael';
    多列建索引比对每个列分别建索引更有优势,因为索引建立得越多就越占磁盘空间,在更新数据的时候速度会更慢。另外建立多列索引时,顺序也是需要注意的,应该将严格的索引放在前面,这样筛选的力度会更大,效率更高。
    展开全文
  • 联合索引多列索引

    千次阅读 2018-08-07 15:37:09
    联合索引是指对表上的进行索引,联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2. 最左匹配原则 假定上图联合索引的为(a,b)。联合索引也是一棵B+树,不同的是B+树在对索引a排序...

    联合索引是指对表上的多个列进行索引,联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2.

    最左匹配原则

    假定上图联合索引的为(a,b)。联合索引也是一棵B+树,不同的是B+树在对索引a排序的基础上,对索引b排序。所以数据按照(1,1),(1,2)......顺序排放。

    对于selete * from table where a=XX and b=XX,显然是可以使用(a,b)联合索引的,

    对于selete * from table where a=XX,也是可以使用(a,b)联合索引的。因为在这两种情况下,叶子节点中的数据都是有序的。

    但是,对于b列的查询,selete * from table where b=XX。则不可以使用这棵B+树索引。可以发现叶子节点的b值为1,2,1,4,1,2。显然不是有序的,因此不能使用(a,b)联合索引。

    By the way:selete * from table where b=XX and a=XX,也是可以使用到联合索引的,你可能会有疑问,这条语句并不符合最左匹配原则。这是由于查询优化器的存在,mysql查询优化器会判断纠正这条sql语句该以什么样的顺序执行效率最高,最后才生成真正的执行计划。所以,当然是我们能尽量的利用到索引时的查询顺序效率最高咯,所以mysql查询优化器会最终以这种顺序进行查询执行。

    优化:在联合索引中将选择性最高的列放在索引最前面。

    例如:在一个公司里以age 和gender为索引,显然age要放在前面,因为性别就两种选择男或女,选择性不如age。

    展开全文
  • 复合索引 /多列索引 /联合索引 /组合索引,一个意思,不同叫法。 含有多个列字段的索引 联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2. 例如: 创建数据库表 CREATE TABLE `test` ('aaa'...

    复合索引 /多列索引 /联合索引 /组合索引,一个意思,不同叫法。

    含有多个列字段的索引

    联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2.

    例如:

     创建数据库表
     CREATE TABLE `test` ('aaa' varchar(16) NOT NULL default '', 'bbb' varchar(16) NOT NULL default '', 'ccc' int(11) UNSIGNED NOT NULL default 0, KEY `sindex` (`aaa`,`bbb`,`ccc`) ) ENGINE=MyISAM ;
    

    alert table test add INDEX sindex (aaa,bbb,ccc)
    sindex 联合索引名 aaa bbb ccc 三个字段

    Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找

    复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。
    如果您知 道姓,电话簿将非常有用;
    如果您知道姓和名,电话簿则更为有用,
    但如果您只知道名不姓电话簿将没有用处

    所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。

    展开全文
  • MySQL按这样的方式使用多列索引:当你在WHERE子句中为索引的第1个列指定已知的数量时,查询很快,即使你没有指定其它列的值。 假定表具有下面的结构: CREATE TABLE test ( id INT NOT NULL,
  • 查看索引 show index from 数据库表名 alter table 数据库add index 索引名称(数据库字段名称) PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) UNIQUE(唯一索引) ...
  • 多列单个索引和联合索引的区别

    千次阅读 2019-06-17 02:39:00
    利用spring boot 构建了200w的数据记录 package com.example.demo.init; import com.example.demo.dao.StudentDao; import ... import lombok.extern.slf4j.Slf4j;...import org.springframe...
  • 索引

    千次阅读 多人点赞 2018-09-07 23:27:20
    索引是一种对数据库表中一列或多列的值进行排序的一种数据存储结构。 需要占用磁盘空间。 类型:普通索引,唯一索引,主键索引,复合索引,聚族索引。 唯一索引:不允许具有索引值相同的行,即每一行数据的索引的...
  • mysql中 myisam,innodb默认使用的是 Btree索引,至于btree的数据结构是怎样的都不重要, 只需要知道结果,既然是索引那这个数据结构最后是排好序;就像新华字典他的目录就是按照a,b,c…这样排好序的; 所以你在找...
  • 数据库索引

    千次阅读 多人点赞 2019-08-20 22:49:54
    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照...
  • Mysql数据库提供两种类型的索引,如果没正确设置,索引的利用效率会大打折扣却完全不知问题出在这。 CREATE TABLE test ( id INT NOT NULL, last_name CHAR(30) NOT NULL, first_name CHAR(30) NOT NULL, ...
  • mysql 索引

    千次阅读 2019-07-26 16:34:11
    ①单列索引:一个索引只包含单个,一个表可以有个单列索引 ②组合索引:一个索引包含 2.索引的创建需要确保索引是引用在sql查询语句上 3.增加索引的优点: ①可以大大提高查询效率 ②可以提高Mysql的...
  • 多列索引

    千次阅读 2012-06-20 22:33:45
    最近在学习DBMS时经常遇到多列索引,一直不是很明白有单列索引,为什么还要有多列索引。今天看到这篇文章后终于懂了。 多列索引  索引可以是单列索引,也可以是多列索引。下面我们通过具体的例子来说明这两种索引...
  • 多个索引与多列索引

    2020-01-02 14:19:12
    我一直在向SQL Server 2005中的表添加索引,这让我开始思考。 创建1个索引和定义而不是要索引的每有1个索引之间有什么区别? 有某些原因为什么要使用另一种方法? 例
  • 正确理解Mysql的列索引和多列索引

    万次阅读 2009-09-22 17:22:00
    Mysql数据库提供两种类型的索引,如果没正确设置,索引的利用效率会大打折扣却完全不知问题出在这。CREATE TABLE test ( id INT NOT NULL, last_name CHAR(30) NOT NULL, first_name CHAR(30) NOT NULL, PRIMARY KEY...
  • Mysql数据库提供两种类型的索引,如果没正确设置,索引的利用效率会大打折扣却完全不知问题出在这。 复制代码 代码如下: CREATE TABLE test (  id INT NOT NULL,  last_name CHAR(30) NOT NULL,  fi

空空如也

1 2 3 4 5 ... 20
收藏数 16,029
精华内容 6,411
关键字:

多列索引