首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL:制作3个字段的复合索引,或者制作3个单独的索引?

对于MySQL中的索引设计,制作3个字段的复合索引还是制作3个单独的索引,需要根据具体的场景和需求来决定。

  1. 复合索引(Composite Index):
    • 概念:复合索引是指将多个字段组合在一起创建的索引,可以提高查询效率。
    • 分类:复合索引可以按照字段的顺序进行分类,如前缀索引、后缀索引等。
    • 优势:复合索引可以减少索引的数量,节省存储空间,同时可以提高查询效率,特别是在多个字段同时进行查询时。
    • 应用场景:适用于多个字段同时进行查询的情况,例如根据用户ID和时间范围进行查询。
    • 推荐的腾讯云相关产品:腾讯云数据库 MySQL版(https://cloud.tencent.com/product/cdb_mysql
  2. 单独索引(Individual Index):
    • 概念:单独索引是指为每个字段分别创建独立的索引。
    • 分类:每个字段都有一个独立的索引。
    • 优势:单独索引可以更精确地满足某个字段的查询需求,适用于单个字段的查询。
    • 应用场景:适用于只需要根据某个字段进行查询的情况,例如根据用户ID进行查询。
    • 推荐的腾讯云相关产品:腾讯云数据库 MySQL版(https://cloud.tencent.com/product/cdb_mysql

综上所述,制作3个字段的复合索引还是制作3个单独的索引,需要根据具体的查询需求来决定。如果需要同时根据这3个字段进行查询,可以考虑创建复合索引;如果只需要根据其中某个字段进行查询,可以考虑创建单独索引。在实际应用中,可以根据具体的业务场景和性能需求进行测试和优化,选择最合适的索引策略。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【推荐】mysql联合 索引(复合索引)探讨

大家好,又见面了,我是你们朋友全栈君。 Mysql联合 索引(复合索引)使用原则 命名规则:表名_字段名 需要加索引字段,要在where条件中。 数据量少字段不需要加索引。...最窄字段放在键左边。 如果where条件中是OR关系,必须所有的or条件都必须是独立索引,否则加索引不起作用。见:mysql关于or索引问题 最左匹配原则。...只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效。所以我们在数据库设计时不要让字段默认值为NULL。...MySql在建立索引优化时需要注意问题 设计好MySql索引可以让你数据库飞起来,大大提高数据库效率。...设计MySql索引时候有一下几点注意: 1,创建索引 对于查询占主要应用来说,索引显得尤为重要。很多时候性能问题很简单就是因为我们忘了添加索引而造成或者说没有添加更为有效索引导致。

2.6K20

MySQL复合索引和单列索引单表查询分析

MySQL索引对查询速度提高非常明显,但是索引种类很多,如复合索引、单列索引,那它们有什么区别和联系呢?下面我会对两者进行分析。...通过上面表格,我们会发现,复合索引( name, age, nickname)和它们三列单个索引是有区别的(该案例不做复合索引和单列索引性能分析)主要区别有以下几点: 复合索引中,只有最左边一列单独使用才会触发索引...MySQL 在进行查询时,会根据索引筛选出复合索引行,如果存在查询条件不在索引列,会进行二次筛选(即根据筛选出来行进行二次查询),导致遍历行数增加。 部分查询条件会导致全表扫描 ?...总结 在我们使用单列索引复合索引时,需要注意以下几点: 常用字段放在第一列,经常和第一列一起使用字段放在第二列,如用户表电话和姓名,身份证表身份照号和姓名,如果超过两列,则注意其顺序。...查询时避免会使索引失效情况发生,如or条件,可以使用union或者union all来达到相同效果。

1.4K10

MySQL 支持JSON字段基本操作、相关函数及索引使用如何索引JSON字段

在Json列插入或者更新时候将会自动验证Json文本,未通过验证文本将产生一个错误信息。...解决方法:数字键必须单独使用双引号包围,如下: SELECT JSON_EXTRACT(@j, '$."0".a') AS `$.0.a`; 其他对JSON操作可以参考: mysql使用json注意事项...并没有提供对JSON对象中字段进行索引功能,我们将利用MySQL 5.7中虚拟字段功能来对JSON对象中字段进行索引。...这也是MySQL默认方式 加完虚拟列建表语句如下,此时虚拟字段还没加索引 CREATE TABLE `t` ( `id` INT UNSIGNED NOT NULL, `js`...MySQL只是在数据字典里保存该字段元数据,并没有真正存储该字段值。这样表大小并没有增加。我们可以利用索引把这个字段值进行物理存储。

26.7K31

制作mysql大数据表并验证覆盖索引查询效率

4.2 单字段索引-name 首先在name字段创建一个单字段索引 mysql>ALTER TABLE `user` ADD INDEX `idx_user_name` (`name`) USING...4.3 单字段索引-mobile 为了测试方便,先删除name字段索引,再创建一个mobile字段索引 mysql> ALTER TABLE `user` DROP INDEX `idx_user_name...语句将mobile字段作为第二个查询条件,mysql仍然使用了mobile上索引进行检索。...mobile索引过滤出来数据有23万行,比基于name更多,所以耗时也就更长。 4.4 双字段索引-name & mobile 这次我们将两个字段建成一个联合索引。...从这个时间,我们应该能够猜出mysql过滤数据过程。mysql执行where过滤时仅仅通过索引即可完成,然后根据索引user_id去数据页面读取相应age值出来做平均。

2.7K20

Mysql复合索引,生效了吗?来篇总结文章

认识复合索引 如果where条件中使用到多个字段,并且需要对多个字段建立索引,此时就可以考虑采用复合索引(组合索引)。...缺点: 索引字段越多,创建索引越多,每个索引都会增加磁盘空间开销; 索引越多对查询效率提升越高,但对需要更新索引增删改操作会有效率影响; 复合索引使用建议:单表最好不要超过1个复合索引,单个复合索引最好不超过...最左匹配原则 复合索引遵从最左匹配原则,顾名思义,在组合索引中,最左侧字段优先匹配。因此,在创建组合索引时,where子句中使用最频繁字段放在组合索引最左侧。...所以结论是:如果单个字段复合索引首个字段,则会正常走索引;如果单个字段复合索引其他字段,且仅有该字段出现在select后面,则会走index类型索引;而其他情况,则走全表扫描。...小结 本篇文章整理了Mysql复合索引使用时所需注意一些知识点,在使用时可以通过explain来查看一下你SQL语句是否走了索引,走了什么索引

80220

mysql 联合索引生效条件、索引失效条件

1.联合索引失效条件 联合索引又叫复合索引。两个或更多个列上索引被称作复合索引。 对于复合索引Mysql从左到右使用索引字段,一个查询可以只使用索引一部份,但只能是最左侧部分。...利用索引附加列,您可以缩小搜索范围,但使用一个具有两列索引不同于使用两个单独索引。...=或者时候无法使用索引会导致全表扫描 is null,is not null也无法使用索引 —- 此处存在疑问,经测试确实可以使用,ref和const等级,并不是all like...,B:int,C:int根据字段A,B,C按照ABC顺序建立复合索引idx_A_B_C,以下查询语句中使用到索引idx_A_B_C语句有哪些?...之所以因为a,c组合也可以,是因为实际上只用到了a索引,c并没有用到,但是显示还是ABC联合索引,实际只是用到了a单列索引; 因为是最左前缀中一种,而如果改为单独条件C = 1,就无法使用索引而是全表扫描

2.8K30

mysql联合索引理解

对于复合索引:Mysql从左到右使用索引字段,一个查询可以只使用索引一部份,但只能是最左侧部分。例如索引是key index (a,b,c)....利用索引附加列,您可以缩小搜索范围,但使用一个具有两列索引 不同于使用两个单独索引。...语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。...9i之前,可以在session级别上加大sort_area_size大小,比如设置为100m或者更大。...设计MySql索引时候有一下几点注意: 1,创建索引 对于查询占主要应用来说,索引显得尤为重要。很多时候性能问题很简单就是因为我们忘了添加索引而造成或者说没有添加更为有效索引导致。

1.5K20

MySQL索引实战附带存储过程

那些情况下不要创建索引 表记录太少 经常增删改或者字段 Where条件里用不到字段不创建索引 过滤性不好不适合建索引(不是男就是女你拿它创建索引干啥。。)...主键自动建立唯一索引 频繁作为查询条件字段应该创建索引 查询中与其它表关联字段,外键关系建立索引 单值/复合索引选择问题, 复合索引性价比更高 查询中排序字段,排序字段若通过索引去访问将大大提高排序速度...查询中统计或者分组字段 战前准备 初始化数据 表记录太少时不建议添加索引,所以咱们得让表数据量大起来呀,这里就涉及到如何高效向数据库中插入数据问题喽。...SQL查询我们自然就想到单值索引复合索引啦,上面提到过啦对于单值索引而言复合索引性价比更高哦,我也不再解释什么,加个索引看看优化效果如何喽。...保证被驱动表join字段已经被索引 left join 时,选择小表作为驱动表,大表作为被驱动表。 inner join 时,mysql会自己帮你把小结果集表选为驱动表。

65010

Mysql优化-索引

索引应该建在小字段上,对于大文本字段甚至超长字段,不要建索引复合索引建立需要进行仔细分析;尽量考虑用单字段索引代替: 复合索引主列字段,要是使用较高选择性字段复合索引几个字段是否经常同时以...如果是,则可以建立复合索引;否则考虑单字段索引; 如果复合索引中包含字段经常单独出现在Where子句中,则分解为多个单字段索引; 如果复合索引所包含字段超过3个,那么仔细考虑其必要性,考虑减少复合字段...; 如果既有单字段索引,又有这几个字段复合索引,一般可以删除复合索引; 频繁进行数据操作表,不要建立太多索引; 删除无用索引,避免对执行计划造成负面影响; 较高选择性:就是通过该字段就可以筛选出满足条件尽可能少数据...复合索引生效规则 如果第一个条件不能单独提供较高选择性,复合索引将会非常有用。 较高选择性:就是通过该字段作为条件就可以筛选出满足条件尽可能少数据。...ref 如果是使用常数等值查询,这里会显示const,如果是连接查询,被驱动表执行计划这里会显示驱动表关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func

1.3K50

mysql复合索引、普通索引总结

( 转 ) mysql复合索引、普通索引总结 对于复合索引:Mysql从左到右使用索引字段,一个查询可以只使用索引一部份,但只能是最左侧部分。例如索引是key index (a,b,c)....如果您很可能对一个两列索引两个列执行单独搜索,则应该创建另一个仅包含第二列索引。 如上图所示,如果查询中需要对年龄和性别做查询,则应当再新建一个包含年龄和性别的复合索引。...在创建复合索引时,每一列都定义了升序或者是降序。...这么做好处:一是简化了MySQL对这个索引管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录这个字段值是否已经在某个记录这个字段里出现过了;如果是,...在为BLOB和TEXT类型数据列创建索引时,必须对索引长度做出限制;MySQL所允许最大索引全文索引文本字段普通索引只能加快对出现在字段内容最前面的字符串(也就是字段内容开头字符)进行检索操作

2.7K20

什么情况下索引会失效?

1.单独引用复合索引里非第⼀位置索引列 假如有INDEX(a,b,c), 当条件为a或a,b或a,b,c时都可以使用索引, 但是当条件为b,c时将不会使用索引。...复合索引遵守“最左前缀”原则,即在查询条件中使用了复合索引第 ⼀个字段索引才会被使用。因此,在复合索引索引顺序⾄关重要。如果不是按照索引最左列开始查找,则⽆法使用索引。...mysql sql 中如果使用了 not in , not exists , ( 不等于 !...4、类型错误,如字段类型为varchar,where条件用number。 例:template_id字段是varchar类型。...from template t where t.template_id = 1 正确写法:select * from template t where t.template_id = ‘1’ 5.如果MySQL

46520

MySQL数据库——索引

概述 索引MySQL中也叫做"键",保存着数据位置信息 其作用是为了加快数据库查询速度 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表记录。...索引使用 添加索引 alter table 表名 add index 索引名(字段名); #案例 alter table classes add index my_name(name); #给classes...; #删除classes表中my_name索引 添加联合索引 语法 联合索引又叫复合索引,是MySQLInnoDB引擎中一个索引方式,如果一个系统频繁地使用相同几个字段查询结果,就可以考虑建立这几个字段联合索引来提高查询效率...alter table 表名 add index 索引名(字段名1,字段名2); 最左前缀原则 在使用联合索引时要注意有个最左前缀原则,最左前缀原则就是要考虑查询字段顺序,只有遵守这个原则才能最大地提高查询效率...比如index(name,age)支持name或者name,age组合查询,不支持age单独查询 select * from students where name = '张三';

31K105

其实 MySQL like 关键字也能用索引

那么现在问题来了,如果我单纯只是想通过 username 字段查询用户呢,是否需要为 username 字段单独建立一个索引?...我们来看下执行计划: 可以看到,这里其实用到了 username 复合索引,通过 Extra 字段值还能看到使用到了覆盖索引。 为啥会这样呢?...最左匹配既可以是匹配复合索引前几个字段,也可以是匹配第一个字段前几个字符,在上面的案例中,我们匹配复合索引第一个字段。...大家看到了,在上面的执行计划中,like 'j%' 其实也用到了索引,那么如果是 like '%j' 或者 like '%j%' 会用到索引吗?我们来看一个例子: 咦!看执行计划似乎也用上索引了!...我们来个反证:假设现在还是使用 username 复合索引,那么就需要把 username 索引整个读一遍,然后过滤出满足条件数据,由于索引中没有保存 address 字段值,所以还需要回表操作,再去主键索引中找到对应记录

2.7K20

MySQL——通过EXPLAIN分析SQL执行计划

UNION UNION中第二个或者后面的查询语句 SUBQUERY 子查询中第一个 table:输出结果集表(表别名) type:表示MySQL在表中找到所需行方式,或者叫访问类型。...2.type=index,索引全扫描,MySQL遍历整个索引来查询匹配行,并不会扫描表 一般是查询字段都有索引查询语句 EXPLAIN SELECT store_id FROM customer;...注意这种情况下比较字段是需要加索引,如果没有索引,则MySQL会进行全表扫描,如下面这种情况,create_date字段没有加索引: EXPLAIN SELECT*FROM customer WHERE...4.type=ref,使用非唯一索引或唯一索引前缀扫描,返回匹配某个单独记录行 store_id字段存在普通索引(非唯一索引) EXPLAIN SELECT*FROM customer WHERE...7.type=NULL,MySQL不用访问表或者索引,直接就能够得到结果 ?

80120

MySQL 索引与优化

越小数据类型通常在磁盘、内存和CPU缓存中都需要更少空间,处理起来更快,整型有余字符串。 考虑为字符串前缀编制索引。 考虑为关联度高字段编制复合索引,并将它们按区分度高低从左到右排序。...复合索引中最左边列可以当作单列索引高效地使用(单列索引对它优势并不明显)。 复合索引中最左边之外单独作为索引时,相比单列索引有明显劣势。...作为两个用OR连接条件,单列索引有一定优势,因为复合索引将导致全表扫描。 作为两个用AND连接条件: 如果两个列之间关联度较低,复合索引有一定优势。...我们应该养成习惯,将索引单独放在比较操作符一侧。 同样,也不能将索引放在函数参数中,本文不再赘述。 规则2:避免隐式类型转换。 这个规则不仅适用于索引字段,也适用于其它所有字段。...如果不行,也可以看看是否可以重写查询语句,将其转化成一个能够利用现有索引或者新创建索引查询。

2.3K10

MySQL——通过EXPLAIN分析SQL执行计划

第二个或者后面的查询语句SUBQUERY子查询中第一个 table:输出结果集表(表别名) type:表示MySQL在表中找到所需行方式,或者叫访问类型。...active=0; type=index,索引全扫描,MySQL遍历整个索引来查询匹配行,并不会扫描表 一般是查询字段都有索引查询语句 EXPLAIN SELECT store_id FROM...>=10 AND customer_id<=20; 注意这种情况下比较字段是需要加索引,如果没有索引,则MySQL会进行全表扫描,如下面这种情况,create_date字段没有加索引: EXPLAIN...SELECT * FROM customer WHERE create_date>='2006-02-13' ; type=ref,使用非唯一索引或唯一索引前缀扫描,返回匹配某个单独记录行...='MARY.SMITH@sakilacustomer.org'; ​ type=NULL,MySQL不用访问表或者索引,直接就能够得到结果 possible_keys: 表示查询可能使用索引

56440

MySQL如何通过EXPLAIN分析SQL执行计划

主查询,即外层查询 UNION UNION中第二个或者后面的查询语句 SUBQUERY 子查询中第一个 table:输出结果集表(表别名) type:表示MySQL在表中找到所需行方式...,system 单表最多有一个匹配行 NULL 不用扫描表或索引 type=ALL,全表扫描,MySQL遍历全表来找到匹配行 一般是没有where条件或者where条件没有使用索引查询语句...EXPLAIN SELECT * FROM customer WHERE active=0; type=index,索引全扫描,MySQL遍历整个索引来查询匹配行,并不会扫描表 一般是查询字段都有索引查询语句...* FROM customer WHERE customer_id>=10 AND customer_id<=20; 注意这种情况下比较字段是需要加索引,如果没有索引,则MySQL会进行全表扫描...=ref,使用非唯一索引或唯一索引前缀扫描,返回匹配某个单独记录行 store_id字段存在普通索引(非唯一索引) EXPLAIN SELECT * FROM customer WHERE store_id

53410
领券