-
2019-04-19 18:03:27
对表 dailykt 建立联合索引(trade_date,ts_code)
alter table dailykt add primary key(trade_date,ts_code);
更多相关内容 -
mysql建立联合索引,mysql建立唯一键,mysql如何解决重复记录联合索引
2022-01-04 10:46:41在项目中,常常要用到联合唯一 在一些配置表中,一些列的组合成为一条记录。 比如,在游戏中,游戏的分区和用户id会形成一条记录。(比如,一个qq用户可以在艾欧尼亚、德玛西亚创建两个账号)在项目中,常常要用到联合唯一
在一些配置表中,一些列的组合成为一条记录。
比如,在游戏中,游戏的分区和用户id会形成一条记录。(比如,一个qq用户可以在艾欧尼亚、德玛西亚创建两个账号)- 添加联合唯一索引
alter table lol_region_user_table add unique index(user_id,game_region); -- 解释版 alter table 表名 add unique index(字段1,字段2);
但是有一种情况是表中已经有n个重复的记录,这时候我们才想起来要添加唯一索引,再执行上面的操作时,数据库会返回1062的添加失败信息,告诉你已经有重复的记录了,建立索引失败。
- 我们可以通过这条sql去查询目前重复的记录:
select user_id,game_region,count(*) as count from lol_region_user_table group by user_id,game_region having count>1; -- 解释版: select 字段1,字段2,count(*) as count from 表名 group by 字段1,字段2 having count>1;
- 我们可以用下面的操作删除重复条目并创建:
alter ignore table lol_region_user_table add unique index(user_id,game_region); -- 解释版 alter ignore table 表名 add unique index(字段1,字段2);
它会删除重复的记录(别怕,会保留一条),然后建立唯一索引,高效而且人性化。
尤其是添加了ignore的这条sql,在建立索引的同时删除了重复数据,相当有用。
-
mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否...
2021-01-18 21:05:07情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?根据查询字段的位置不同来决定,如查询a, a,b a,b,c a,c 都可以走索引的,其他条件的查询不能...情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?
根据查询字段的位置不同来决定,如查询a, a,b a,b,c a,c 都可以走索引的,其他条件的查询不能走索引。
组合索引 有“最左前缀”原则。就是只从最左面的开始组合,并不是所有只要含有这三列存在的字段的查询都会用到该组合索引。
验证过程如下所示:
首先,在SQLyog中建立一个user表,如下图所示;
对中间3个字段(user_name,user_age,user_password)进行联合索引 index_user_join
查询情况如下所示:
1.同时查询这3个字段作为条件的SQL,索引情况及SQL语句如下所示:
SELECT *FROM t_user WHERE user_name='zs' AND user_age=20 AND user_password='123456';
其使用索引情况如下所示:
从执行结果上可以看到是从走索引进行查询的
2.使用user_age和user_password作为查询条件进行查询,索引及SQL语句如下所示:
3.使用user_name和user_password作为查询条件进行查询,索引及SQL语句如下所示:
4.使用user_name作为查询条件进行查询,索引及SQL语句如下所示:
5.使用user_age作为查询条件进行查询,索引及SQL语句如下所示:
6.使用user_password作为查询条件进行查询,索引及SQL语句如下所示:
以上是针对普通的字段建立联合索引的测试情况及截图,欢迎小伙伴们来补充~
-
mysql之联合索引
2021-01-19 04:27:11mysql之联合索引测试:前期准备:建立联合索引?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`...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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
如果表已经建好了,那么修改表:
create index `sindex` on `test` (`aaa`,`bbb`,`ccc`);
这种方式报错
alert table test add INDEX `sindex` (`aaa`,`bbb`,`ccc`)
修改表的存储引擎:
ALTER TABLE tablename ENGINE = MyISAM;
ALTER TABLE tablename ENGINE = INNODB;
Explain:
其中最重要的字段为:id、type、key、rows、Extra
id:
1、id相同:执行顺序由上至下
2、id不同:如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
3、id相同又不同(两种情况同时存在):id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行
type:
访问类型,sql查询优化中一个很重要的指标,结果值从好到坏依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
key:
查询中如果使用了覆盖索引,则该索引仅出现在key列表中
rows:
根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数
Extra:
1、Using filesort :
mysql对数据使用一个外部的索引排序,而不是按照表内的索引进行排序读取。也就是说mysql无法利用索引完成的排序操作成为“文件排序”
2、Using temporary:
使用临时表保存中间结果,也就是说mysql在对查询结果排序时使用了临时表,常见于order by 和 group by
3、Using index:
表示相应的select操作中使用了覆盖索引(Covering Index),避免了访问表的数据行,效率高
如果同时出现Using where,表明索引被用来执行索引键值的查找(参考上图)
如果没用同时出现Using where,表明索引用来读取数据而非执行查找动作
覆盖索引(Covering Index):也叫索引覆盖。就是select列表中的字段,只用从索引中就能获取,不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖。
Explain:
下方的控制台主要关注两个栏,type和extra
当extra出现道Using filesort和Using temproary这两个时,表示无法使用索引版,必须尽快做优化。
当type出现all时,表示走的是全表扫描没有走索引,效率低下,这时需要对sql进行调优。
当type出现ref或者index时,表示走的是索引,index是标准不重复的索引,ref表示虽然使用了索引,但是索引列中有重复的值,但是就算有权重复值,也只是在重复值的
范围内小范围扫描,不造成重大的性能影响。
测试语句是否使用了索引:
网上说联合索引 test_col1_col2_col3 实际建立了(col1)、(col1,col2)、(col,col2,col3)三个索引。但是
我蒙蔽了,在我实际的测试中,aaa bbb ccc 这三个条件不管删除那个,怎么组合where条件查询 type:index extral:Using where; Using index 难道说都用到索引了嘛?
sql1:explain select * from test where aaa=1 and bbb=1;
用到了索引
sql2:explain select * from test where bbb=1 and aaa=1;
联合索引设置
aaa bbb
bbb aaa
bbb
-
深入浅析Mysql联合索引最左匹配原则
2020-12-16 02:20:40在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,示例: 对列col1、列col2和列col3建一个联合索引 KEY test_col1_col2_col3 on test(col1,col2,col3); 联合... -
MySQL之联合索引和覆盖索引
2022-04-28 11:46:34介绍MySQL联合索引和覆盖索引的联系及特点 -
数据库联合索引
2022-04-11 15:34:15数据库、索引、优化、联合索引、组合索引 -
mysql中如何用命令创建联合索引
2021-11-05 10:33:06目录普通联合索引唯一联合索引普通联合索引和唯一联合索引的区别 普通联合索引 语法: create index 索引名称 on 表名(字段名称) 示例: create index firstIndex on student(id, name, address); 注意: 索引... -
mysql 联合索引
2021-08-24 16:50:51mark一下联合索引、最左匹配的知识,还有联合索引的一些实战题 最左匹配 讲联合索引,一定会提到最左匹配! 所谓最左原则指的就是:如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以... -
详细讲解MySQL索引与联合索引
2019-07-25 15:39:32那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下。 一、联合索引测试 注:Mysql版本为 5.7.20 创建测试表(表记录数... -
如何创建联合索引
2021-02-22 20:37:06有一天我们的DBA 找到我,说...按照我们的想法,一个查询创建一个索引,所以我们针对这两条SQL 创建了两个索引,这种做法觉得正确吗? CREATE INDEX idx_name on user_innodb(name); CREATE INDEX idx_name_phone o -
mysql索引(五)联合索引
2021-07-14 11:35:42Mysql索引大概有五种类型: 普通索引(INDEX):最基本的索引,没有任何限制 唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列...联合(组合)索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原 -
mysql联合索引,联合索引使用的注意事项
2020-08-26 18:23:45在建立联合索引的时候应该注意索引列的顺序,一般情况下,将查询需求频繁或者字段选择性高的列放在前面。 具体原因为: MySQL使用索引时需要索引有序,如建立了"name,age,school"的联合索引,索引的排序为: 先按照... -
mysql联合索引
2021-11-25 09:55:27联合索引是由多个字段组成的索引 如果你经常要用到多个字段的多条件查询,可以考虑建立联合索引,一般是除第一个字段外的其它字段不经常用于条件筛选情况,比如说a,b 两个字段,如果你经常用a条件或者a+b条件去查询... -
为什么要创建联合索引
2022-03-06 22:44:44多个单列索引联合使用,同样可以达到联合索引的功能,并且联合索引还会有索引失效的情况,禁不住一探为什么还要创建联合索引?总结下来有4个优点,分别时降低维护索引的开销、使用索引下推减少回表查询记录数、使用... -
MySQL---覆盖索引和联合索引
2021-07-01 18:59:53联合索引最左前缀原则思考:建立联合索引的时候,如何定义索引内的字段顺序。索引下推联合索引失效条件 覆盖索引 create table student( id int primary key, name varchar(10) NOT NULL, age int NOT NULL, gender... -
单列索引和联合索引
2020-12-13 20:56:03联合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏进行排序,然后按名字对有相同姓氏的人进行排序。如果您知道姓,电话簿将非常有用,如果您知道姓和名,电话簿则更为有用,但如果您只知道名不知道姓... -
mysql创建单个和联合索引
2021-02-07 03:34:09欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 首先创建一个表:... 创建单个索引的语法:create index 索引名 on 表名(字段名) 索引名一般是:表名_字段欢迎进入Linux社区论坛,与200万技术人员... -
联合索引,回表,索引覆盖
2021-01-11 22:52:22mysql建立联合索引有最左前置原则,在建立联合索引时,根据需求,where子句中使用最频繁的一列放在最左边; 如何理解联合索引中遵守的最左前置原则? mysql默认的存储引擎是InnoDB,InnoDB使用B+树,B+树的数据项... -
Elasticsearch的索引,单field索引和多field的联合索引
2021-01-20 12:46:11作为一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎。Elasticsearch 可以用于:分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索;实时分析的分布式... -
什么时候用到联合索引
2021-02-22 20:34:26所以,我们在建立联合索引的时候,一定要把最常用的列放在最左边。 比如下面的三条语句,能用到联合索引吗? 1)使用两个字段,可以用到联合索引: EXPLAIN SELECT * FROM user_innodb WHERE name= '权亮' AND ... -
mysql优化(一)---创建联合索引
2021-11-09 11:20:09创建联合索引 前言 好长时间没写东西了, 今天水一篇吧 背景: 公司是初创团队, 项目是我跟着搞起来的(招聘行业), 最初因为着急上线,加班加点,一个月的时间从无到有吧 。最初想着快点上线, 很多地方没有做过多的优化,... -
图文详解MySQL中两表关联的连接表如何创建索引
2020-09-09 16:52:31通过图文给大家介绍了关于MySQL中两表关联的连接表如何创建索引的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。 -
mysql中两个int字段建立联合索引,没有用到索引
2018-07-24 11:36:07这两天有一个任务表 t_task_list ,搜索条件下面都有,相关的索引也有,但就是用不到索引,应该是跟数据分布有关,所以对索引做了调整。 最重要的不是对索引做了调整,而是,不要以为建了索引就一定能用到,还是... -
msyql (三) 创建表的同时添加索引,联合索引
2020-10-29 16:44:56CREATE 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 关于联合索引的字段顺序规则讨论
2021-02-03 03:45:50联合索引的顺序,难道不是哪个查询条件最多用就放在前面的吗?比如商品有三个分类A,B,C,类似「界门纲目科属种」那样,越左类别越大。还有一个是商品来源D,不一定会用于查询条件中。举个例子,A代表衣服,B代表... -
MySQL数据库联合索引的命中规则
2021-07-27 16:18:46一、联合索引的使用 本文中联合索引的定义为(MySQL): ALTER TABLE table_name ADD INDEX (col1,col2,col3); 二、联合索引的本质 当创建(col1,col2,col3)联合索引时,相当于创建了(col)单列索引,(clo1,clo2)联合... -
【mysql】普通索引和组合索引(复合索引、联合索引) & 最左原则
2020-12-30 17:39:56文章目录概述普通索引唯一索引主键索引组合索引最左前缀 概述 索引分单列索引和组合索引: 单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引; 组合索引(也叫复合索引),即一个...