精华内容
下载资源
问答
  • 创建联合索引
    千次阅读
    2021-02-22 20:37:06

    有一天我们的DBA 找到我,说我们的项目里面有两个查询很慢。

    SELECT * FROM user_innodb WHERE name= ? AND phone = ?;
    SELECT * FROM user_innodb WHERE name= ?;

    按照我们的想法,一个查询创建一个索引,所以我们针对这两条SQL 创建了两个索引,这种做法觉得正确吗?

    CREATE INDEX idx_name on user_innodb(name);
    CREATE INDEX idx_name_phone on user_innodb(name,phone);

    当我们创建一个联合索引的时候,按照最左匹配原则,用左边的字段name 去查询的时候,也能用到索引,所以第一个索引完全没必要。

    相当于建立了两个联合索引(name),(name,phone)。

    如果我们创建三个字段的索引index(a,b,c),相当于创建三个索引:

    index(a)

    index(a,b)

    index(a,b,c)

    用where b=? 和where b=? and c=? 和where a=? and c=?是不能使用到索引的。不能不用第一个字段,不能中断。

    这里就是MySQL 联合索引的最左匹配原则。

     

    更多相关内容
  • mysql中如何用命令创建联合索引

    千次阅读 2021-11-05 10:33:06
    目录普通联合索引唯一联合索引普通联合索引和唯一联合索引的区别 普通联合索引 语法: create index 索引名称 on 表名(字段名称) 示例: create index firstIndex on student(id, name, address); 注意: 索引...

    普通联合索引

    语法:

    create index 索引名称 on 表名(字段名称)

    示例:

    create index firstIndex on student(id, name, address);

    注意:

    1. 索引名称、表名、字段名称 都不要用引号括起来
    2. 对于联合索引而言,字段名称可以有多个,中间用英文逗号分隔即可
    3. 普通索引数据可以重复

    结果:

    在这里插入图片描述

    唯一联合索引

    语法:

    create unique index 索引名称 on 表名(字段名称)

    示例:

    create unique index secondIndex on student(id, name, address);

    注意:

    1. 索引名称、表名、字段名称 都不要用引号括起来
    2. 对于联合索引而言,字段名称可以有多个,中间用英文逗号分隔即可
    3. 唯一索引数据不可重复

    结果:

    在这里插入图片描述

    普通联合索引和唯一联合索引的区别

    语法不同,普通联合索引 以create index ……开头,而 唯一联合索引 以create unique index ……开头

    展开全文
  • mysql优化(一)---创建联合索引

    千次阅读 2021-11-09 11:20:09
    创建联合索引 前言 好长时间没写东西了, 今天水一篇吧 背景: 公司是初创团队, 项目是我跟着搞起来的(招聘行业), 最初因为着急上线,加班加点,一个月的时间从无到有吧 。最初想着快点上线, 很多地方没有做过多的优化,...

    创建联合索引

    前言

    好长时间没写东西了, 今天水一篇吧 hiahiahia~



    举个栗子, 如图 :

    在这里插入图片描述
    通过链路追踪发现这个接口属实是有点慢了, 四秒多, 叔可忍婶婶不可忍! 弄他

    二、利用我们的聪明的大脑袋想好怎么优化, 嗯, 这是重点

    1.接口层面

    2.数据库层面

    今天只写如何加索引. 加索引首先要弄清楚mysql相关知识,比如索引啊,存储引擎啊,数据结构啊等等.


    时间有限, 就不一一赘述了。 举个简单的例子:

    select count(1) from clue_library where chat_name = '刷坡小王子' and clue_type = 1
    我们 explain 看一下sql执行计划,全表扫描扫了三十多万行
    在这里插入图片描述

    创建索引时,可以指定多个列创建联合索引,为表 clue_library 创建 chat_name 和 clue_type 列的索引,SQL 语句如下:

    CREATE INDEX chat_name_clue_type ON clue_library ( `chat_name`, `clue_type`)
    

    然后查看一下是否创建完成:
    在这里插入图片描述

    创建成功, 再次执行sql进行查询:
    在这里插入图片描述

    扫描510行, 简单优化一下, 后边有时间再写(水)几篇~~~

    总结

    时间有限 , 后续再补充
    只要心中不水 , 再水的水文也不算水(滑稽)

    展开全文
  • 为什么要创建联合索引

    千次阅读 2022-03-06 22:44:44
    多个单列索引联合使用,同样可以达到联合索引的功能,并且联合索引还会有索引失效的情况,禁不住一探为什么还要创建联合索引?总结下来有4个优点,分别时降低维护索引的开销、使用索引下推减少回表查询记录数、使用...

    多个单列索引联合使用,同样可以达到联合索引的功能,并且联合索引还会有索引失效的情况,禁不住一探为什么还要创建联合索引?总结下来有4个优点,分别时降低维护索引的开销、使用索引下推减少回表查询记录数、使用索引覆盖减少回表以及减少避免死锁频率。

    联合索引数据结构

    联合索引创建索引,非叶子节点只会存储联合索引的第一个关键字,叶子节点存储联合索引的所有字段值+集索引索引Id,查询的时候,先比较第一个关键字,第一个关键字相同 ,比较第二个关键字,第一个关键字,则按照后面的关键字排序,后面关键仅局部有序。
    在这里插入图片描述

    联合索引进行范围查询后,为什么后面的索引字段会失效:

    select * from where a > 1 and b = 2;
    

    因为a>1的所有记录中,b是整体无序的,只局部有序,只有联合索引第一个字段时整体有序的。

    优点1:降低索引维护开销

    索引字段的更新,需要修改对应的索引,两个索引只需维护一个B+Tree树,分开的索引,需要对每个B+Tree树进行修改。

    优点2:索引下推

    所谓索引下推就是当使用索引多个字段作为查询条件时,当根据联合索引第一个字段查询筛选到记录是,会继续使用联合索引后面字段你对该记录进行筛选,筛选结束后,得到聚集索引值,可以减少回表时查询的记录数。

    例子:从account表中根据查询户名和密码满足条件、并且依然生效的用户所有信息(is_deleted= 0),account表中有一个联合主键(user_name,password,is_deleted);

    select * from account wehre user_name= ‘张三’ and password = ‘123456’ and is_deleted = 0;

    关闭索引下推查询过程:

    首先根据user_name =”张三”找到所有条件的聚集索引id,然后回表,得到所有索引记录,然后再再得到的记录中使用查询条件对回表得到的索引记录进行筛选过滤。

    开启索引下推查询过程:

    首先根据user_name=”张三”确定所有满足条件的叶子条件,然后使用联合索引中其它列对叶子节点进行筛选,拿着筛选到的聚集索引进行回表。这样减少回表查询数据记录数。

    可以通过设置SET optimizer_switch = ‘index_condition_pushdown=off’;关闭或者开启索引下推。

    优点3:索引覆盖

    select password ,username from account where phone = “13456707045” ;

    在一个表中如果查询条件字段和select 字段在一个索引中,那么就不需要回表,就可以直接获得所需要的值。

    优点4:降低死锁发生概率

    非聚集索作为查询条件的加锁顺序为先对所有要回表记录的非聚集索引加锁,然后回表对聚集索引加锁。并发环境下,在一条sql语句的where条件中同时使用多个非聚集单列索引,需要执行多组非聚集聚集索引和聚集索引加锁,在不同事务中,每组执行顺序不一致是,增加了产生死锁的原因;使用联合索引,第一个事务先对非聚集索引加锁,然后对所有要回表记录非聚集索引加锁,再对聚集索引加锁,执行顺序只有一种,死锁产生的概率大大降低,虽然mysql有自动死锁检测和修复功能,但高频率的死锁会影响查询效率。

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • SpringDataJpa创建联合索引

    千次阅读 2019-12-30 15:16:14
    创建联合索引对应类 /** * 作者:guoyzh * 时间:2019/12/30 14:58 * 功能:戴镜视力复查联合主键 */ @Data @Embeddable public class VisualReexaminationUnionKey implements Serializable { @Column(name =...
  • MySql创建联合索引

    万次阅读 2018-05-31 18:08:38
    首先创建一个表:create table t1 (id int primary key,username varchar(20),password varchar(20));创建单个索引的语法:create index 索引名 on 表名(字段名)索引名...创建联合索引的语法:create index 索引名...
  • 联合索引的存储结构联合索引字段的先后顺序b+树可以存储的数据条数总结 前言 ​ 对于联合索引我们知道,在使用的时候有一个最左前缀的原则,除了这些呢,比如字段放置的位置,会不会对索引的效率产生影响呢? 最左...
  • mysql如何创建多个联合索引

    千次阅读 2021-01-18 19:09:07
    创建联合索引时,应该仔细考虑列的顺序。MySQL中索引规则:1、需要加索引的字段,要在where条件中2、数据量少的字段不需要加索引3、如果where条件中是OR关系,加索引不起作用4、符合最左原则什么是联合索引?联合...
  • mysql创建单个和联合索引

    千次阅读 2021-02-07 03:34:09
    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 首先创建一个表:... 创建单个索引的语法:create index 索引名 on 表名(字段名) 索引名一般是:表名_字段欢迎进入Linux社区论坛,与200万技术人员...
  • 联合索引(复合索引) 联合索引又叫复合索引。两个或更多个列上的索引被称作复合索引。 对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key ...
  • MySQL单列索引和联合索引

    千次阅读 多人点赞 2022-09-02 11:11:33
    多个单列索引在多条件查询时优化器会优先选择最优索引策略,可能只用一个索引,也可能将多...但多个单列索引底层会创建多个B+索引树,比较占用空间,也会浪费一定搜索效率,故如果只有多条件联合查询时最好建联合索引
  • CREATE TABLE IF NOT EXISTS `表名`( `id` INT...KEY (`device_id`,`time`) #设置device_id,time为联合索引 foreign key (`device_id`) references device(`id`) #foreign key (字段名) references 外表名(外表名id)
  • mysql联合索引如何创建

    万次阅读 2018-06-01 17:26:54
    这样就在 aaa、bbb、ccc 3列上建立联合索引了。 如果表已经建好了,那么就在phpmyadmin里面执行: alert table test add INDEX `sindex` (`aaa`,`bbb`,`ccc`) 就可以在这3列上建立联合索引了。
  • 联合索引要遵从最左前缀原则,否则不会用到索引 Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。 如索引是 index (a,b,c),可以支持 a 或 a,b 或 a,b,c 3种组合进行...
  • mysql之联合索引

    千次阅读 2021-01-19 04:27:11
    mysql之联合索引测试:前期准备:建立联合索引?CREATE TABLE `test` (`id` bigint(16) NOT NULL AUTO_INCREMENT,`aaa` varchar(16) NOT NULL,`bbb` varchar(16) NOT NULL,`ccc` int(11) NOT NULL,PRIMARY KEY (`id`...
  • Oracle创建索引的基本规则

    千次阅读 2021-05-03 05:20:03
    创建索引的基本规则一、B-Tree索引1. 选择索引字段的原则:在WHERE子句中最频繁使用的字段联接语句中的联接字段选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很好)Oracle在UNIQUE和主键字段...
  • 概述: ...3、设置联合索引 ALTER TABLE 表名 ADD UNIQUE KEY(字段名1, 字段名2); 4、SpringMVC可以 直接接受前端js数组 数据,以前会把它转成String,传到后台进行处理成数组。
  • 数据库联合索引

    千次阅读 2022-04-11 15:34:15
    数据库、索引、优化、联合索引、组合索引
  • 创建普通索引的时候,指定两个或更多的字段这就是联合索引,语法如下alter table 表 add index 索引名(字段1,字段2)维护数据库时发现现索引重复了?这时可以删掉重复的索引,释放内存空间,提高查询效率#因为联合...
  • MySQL创建复合索引

    千次阅读 2021-01-18 19:09:07
    在MySQL数据库中,创建复合索引的时候,不知道在创建过程中哪个列在前面,哪个列该在后面,用以下方式即可:select count(distinct first_name)/count(*) as first_name_selectivity,count(distinct last_name)/...
  • 有一个表,要创建两个列的唯一索引,但是有一列可以为空,这时要分两种情况建两个索引。如果只建一个,那么当parent_id为空时,即使name不同,也可以重复。 也就是说加索隐时也可以使用where条件。 CREATE TABLE ...
  • Sql联合索引语句

    千次阅读 2020-05-27 15:17:55
    use t0netcoresystem; alter table stockpools add unique index(AccountName, StockCode, TradeDate);
  • 表已创建。 SQL> select object_name from all_objects where object_type='INDEX' and owner='A WEN'; OBJECT_NAME ------------------------------ SYS_C005556 IN_PK SYS_C005558 OB_INDEX SQL> drop table ...
  • mysql联合索引 sql索引使用

    千次阅读 2021-01-18 18:39:55
    注意:Index(Name,Age)表示在Name,Age两列上建立联合索引由于索引对数据库的查询性能有着至关重要的影响,下面是我的一些总结和体会:一个查询一次只能使用一个索引:select name from user where name='plantegg'...
  • 在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,示例: 对列col1、列col2和列col3建一个联合索引 KEY test_col1_col2_col3 on test(col1,col2,col3); 联合...
  • 联合索引(复合索引)和单个索引

    千次阅读 2019-02-23 15:56:41
    那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下。 一、联合索引测试 注:Mysql版本为 5.7.20 创建测试表(表记录数...
  • 执行SQL统计:耗时12.5s 图5 创建联合索引 执行SQL统计:耗时25.9s 图6 图7-联合索引情况 通过图7 和图4的 索引情况对比,不难发现,字段Quan_timestamp 和Quan_surplus的索引基数(Cardinality)差别很大。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 96,664
精华内容 38,665
关键字:

创建联合索引

友情链接: detectFaceParts20160607.zip