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

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

( 转 ) mysql复合索引、普通索引总结 对于复合索引:Mysql从左到右使用索引字段,一个查询可以只使用索引一部份,但只能是最左侧部分。例如索引是key index (a,b,c)....如:建立 姓名、年龄、性别的复合索引。 ? 复合索引建立原则: 如果您很可能仅对一个列多次执行搜索,则该列应该是复合索引第一列。...而且由于使用相当多内存来存储复合索引值,其后果是内存溢出和性能降低。 复合索引对排序优化: 复合索引只对和索引中排序相同或相反order by 语句优化。...这么做好处:一是简化了MySQL对这个索引管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录这个字段值是否已经在某个记录这个字段里出现过了;如果是,...5、复合索引 索引可以覆盖多个数据列,如像INDEX(columnA,columnB)索引。这种索引特点是MySQL可以有选择地使用一个这样索引

2.7K20

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

只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效。所以我们在数据库设计时不要让字段默认值为NULL。...MySql在建立索引优化时需要注意问题 设计好MySql索引可以让你数据库飞起来,大大提高数据库效率。...2,复合索引 比如有一条语句是这样:select * from users where area=’beijing’ and age=22; 如果我们是在area和age上分别创建单个索引的话,由于mysql...3,索引不会包含有NULL值列 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效。...5,排序索引问题 mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中列是不会使用索引

2.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

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

MySQL索引对查询速度提高非常明显,但是索引种类很多,如复合索引、单列索引,那它们有什么区别和联系呢?下面我会对两者进行分析。...keys:索引类型,表示MySQL此次查询中使用索引,多个用逗号分开。 rows:遍历行数,表示MySQL此次查询遍历行数大小,该值越小,查询速度会越快,是一个估计值,非绝对正确。...where 条件后面的顺序不影响复合索引触发如 age=21andname='test1' 一样会触发复合索引(MySQL会对查询条件顺序进行优化,我们无需担心顺序问题,但是为了更好理解,建议合理安排顺序...然后第四行是使用了复合索引第一列 name 和非复合索引列作为查询条件,rows 同样是2,非相连两列作为查询条件时,复合索引相当于使用了第一列作为查询条件。...MySQL 在进行查询时,会根据索引筛选出复合索引行,如果存在查询条件不在索引列,会进行二次筛选(即根据筛选出来行进行二次查询),导致遍历行数增加。 部分查询条件会导致全表扫描 ?

1.4K10

MongoDB 复合索引

MongoDB支持复合索引,即将多个键组合到一起创建索引。该方式称为复合索引,或者也叫组合索引,该方式能够满足多键值匹配查询使用索引情形。其次复合索引在使用时候,也可以通过前缀法来使用索引。...MongoDB中复合索引与关系型数据库基本上一致。在关系型数据库中复合索引使用一些原则同样适用于MongoDB。本文主要描述MongoDB复合索引。.../leshami/article/details/53541978 2、复合索引一些特性 复合索引可以支持要求匹配多个键查询 复合索引每一个键顺序非常重要,这将决定该索引在查询过程中能否被使用到...复合索引支持前导(缀)列索引查询 不能够创建基于哈希索引类型复合索引 任意复合索引字段不能超过31个 二、复合索引示意图 如下图所示,在集合userid...5、小结 a、复合索引是基于多个键(列)上创建索引 b、复合索引在创建时候可以为其每个键(列)来指定排序方法 c、索引键列排序方法影响查询在排序时候操作,方向一致或相反才能被匹配

3K10

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

覆盖索引MySQL可以直接通过遍历索引取得数据,而无需回表,减少了很多随机io操作。 效率高:索引列越多,通过索引筛选出来数据就越少,从而提升查询效率。...两种查询方式条件一样,结果也应该一样,正常来说Mysql也会让它们走同样索引。 通过Mysql查询优化器explain分析上述两个条语句,会发现执行计划完全相同。...ref类型表示Mysql会根据特定算法快速查找到符合条件索引,而不会对索引中每一个数据都进行扫描判断。这种类型索引为了快速查出数据,索引就需要满足一定数据结构。...index类型表示Mysql会对整个索引进行扫描,只要是索引索引一部分Mysql就可能会采用index方类型方式扫描。由于此种方式是一条数据一条数据查找,性能并不高。...小结 本篇文章整理了Mysql复合索引使用时所需注意一些知识点,在使用时可以通过explain来查看一下你SQL语句是否走了索引,走了什么索引

80220

优化MongoDB复合索引

nscannedObjects 是Mongodb为了获得获得最终结果而访问数据行数(译者注:MongoDB中索引和数据是通过RecordId二级关联起来,没有类似于Mysql中聚簇索引概念,当查询无法被索引完全覆盖时...聪明读者可能猜到了,如果我们把复合索引字段顺序颠倒一下,似乎就可以达到这个目标了。我们把索引顺序从 (timestamp,anonymous)变成(anonymous,timestamp)。 ?...和所有数据库一样,字段顺序在MongoDB复合索引中至关重要。如果索引以anonymous字段为前缀,Mongo可以直接跳到非匿名评论对应记录。...总结 针对一个包含等式过滤,范围过滤和排序字段查询,建立复合索引字段优先级,可以参考下面的规则 将所有等式过滤字段放在复合索引中最靠前部分。 其次放入排序字段。...最后,如果一张表上有多个索引,有时业务指定Hint可能会比MongoDB使用查询优化器选择索引更好。 讲完了,对于包含多个字段复杂查询,建立复合索引是需要技巧。希望本篇文章能够帮助到你。

2.8K20

优化MongoDB复合索引

nscannedObjects 是Mongodb为了获得获得最终结果而访问数据行数(译者注:MongoDB中索引和数据是通过RecordId二级关联起来,没有类似于Mysql中聚簇索引概念,当查询无法被索引完全覆盖时...聪明读者可能猜到了,如果我们把复合索引字段顺序颠倒一下,似乎就可以达到这个目标了。我们把索引顺序从 (timestamp,anonymous)变成(anonymous,timestamp)。 ?...和所有数据库一样,字段顺序在MongoDB复合索引中至关重要。如果索引以anonymous字段为前缀,Mongo可以直接跳到非匿名评论对应记录。...总结 针对一个包含等式过滤,范围过滤和排序字段查询,建立复合索引字段优先级,可以参考下面的规则 将所有等式过滤字段放在复合索引中最靠前部分。 其次放入排序字段。...最后,如果一张表上有多个索引,有时业务指定Hint可能会比MongoDB使用查询优化器选择索引更好。 讲完了,对于包含多个字段复杂查询,建立复合索引是需要技巧。希望本篇文章能够帮助到你。

2.8K30

MongoDB复合索引详解

摘要: 对于MongoDB多键查询,创建复合索引可以有效提高性能。 什么是复合索引复合索引,即Compound Index,指的是将多个键组合到一起创建索引,这样可以加速匹配多个键查询。...不妨通过一个简单示例理解复合索引。...但是,IXSCAN使用是name与age复合索引;FETCH即根据索引去查询文档,不需要过滤。 这个示例数据量太小,并不能看出什么问题。...创建复合索引 没有为projectId和createAt创建复合索引是个尴尬错误,赶紧补救一下: db.events.createIndex({projectId:1,createTime:-1},{...对比使用复合索引前后结果,发现totalDocsExamined从28338降到了0,表示使用复合索引之后不再需要去查询文档,只需要扫描索引就好了,这样就不需要去访问磁盘了,自然快了很多。

1.3K40

索引(index)_普通索引、唯一索引复合索引.索引查询

这么做好处:一是简化了MySQL对这个索引管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录这个字段值是否已经在某个记录这个字段里出现过了;如果是,...MySQL将拒绝插入那条新记录。...DROP INDEX ind_user_info_name ON user_info; DROP INDEX uni_user_info_pass ON user_info; 创建一个唯一性复合索引:...关于普通复合索引index这里就不再详细执行截图描述,只需要注意下面这形式索引意义就OK了!!!!...当建立复合索引index(column1,column2,column3),这就相当于建立了以下三个索引: index(column1), index(column1,column2) index(column1

1.1K40

MySql复合查询

前面我们讲解mysql查询都是对一张表进行查询,在实际开发中这远远不够。...回顾基本查询 回顾一下前面所学基本查询,通过一些案例来练习回顾: 查询工资高于500或岗位为MANAGER雇员,同时还要满足他们姓名首字母为大写J select * from emp where...(mgr是员工领导编号–empno) 想找FORD领导编号,通过EMP表;根据领导编号,找领导信息,也是通过EMP表: 使用子查询 select ename,empno from emp where...ename='SMITH'); 多行子查询 返回多行记录子查询 in关键字;查询和10号部门工作岗位相同雇员名字,岗位,工资,部门号,但是不包含10自己 select ename,job...多列子查询 单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言,而多列子查询则是指查询返回多个列数据子查询语句 查询和SMITH部门和岗位完全相同所有雇员

19330

MySQL复合查询

复合查询 前面我们讲解 mysql查询都是对一张表进行查询,在实际开发中这远远不够,接下来我们要学习多表查询,即符合查询。...原理如下图: 将 emp 表每一个 deptno 与 dept 表每一个 deptno 进行组合,形成新一行,当 emp 表中所有 deptno 和 dept 表中 deptno 全部组合完成...in 关键字;查询和 10 号部门工作岗位相同雇员名字,岗位,工资,部门号,但是不包含 10 自己 select ename, job, sal, deptno ->...:想办法将多表转化为单表,所以 mysql 中,所有 select 问题全部都可以转成单表问题!...五、练习 查找所有员工入职时候薪水情况 获取所有非manager员工emp_no 获取所有员工当前manager

11110

「生产事故」MongoDB复合索引引发灾难

注意:不用索引排序操作,会在内存超过32MB时终止,也就是说MongoDB只能支持32MB以内索引排序 知识点二:单列索引不在乎方向 无论是MongoDB还是MySQL都是用树结构作为索引,如果排序方向和索引方向相反...复合索引结构示意图如下所示: 该索引刚好和我们讨论是一样,userid顺序,score倒序。 我们需要直面第二个问题:复合索引在使用时需不需要在乎方向?...,所以需要从左侧开始遍历 从倒序顺序中找小于某个值数据,势必会扫描很多无用数据,然后丢弃,当前场景下找大于某个值才是最佳方案 所以MongoDB为了更多场景考虑,在该种情况下,放弃了复合索引,选用其他索引...db.sku_main.ensureIndex({"orgCode": 1, "_id": -1},{background:true}); 犯错误一模一样,所以MongoDB放弃了复合索引使用,该为单列索引...,但是问题既然已经定位,修改什么就不难了,回顾上述内容总结如下: 学习数据库知识时候可以用类比方式,但是需要额外注意其不同地方(MySQL、MongoDB索引索引方向) MongoDB数据库单列索引可以不在乎方向

1.5K20

「生产事故」MongoDB复合索引引发灾难

注意:不用索引排序操作,会在内存超过32MB时终止,也就是说MongoDB只能支持32MB以内索引排序 知识点二:单列索引不在乎方向 无论是MongoDB还是MySQL都是用树结构作为索引,如果排序方向和索引方向相反...复合索引结构示意图如下所示: ? 该索引刚好和我们讨论是一样,userid顺序,score倒序。 我们需要直面第二个问题:复合索引在使用时需不需要在乎方向?...,所以需要从左侧开始遍历 从倒序顺序中找小于某个值数据,势必会扫描很多无用数据,然后丢弃,当前场景下找大于某个值才是最佳方案 所以MongoDB为了更多场景考虑,在该种情况下,放弃了复合索引,选用其他索引...,但是问题既然已经定位,修改什么就不难了,回顾上述内容总结如下: 学习数据库知识时候可以用类比方式,但是需要额外注意其不同地方(MySQL、MongoDB索引索引方向) MongoDB数据库单列索引可以不在乎方向...,如对无索引字段排序需要控制数据量级(32M) MongoDB数据库复合索引在使用中一定要注意其方向,要完全理解其逻辑,避免索引失效

1.1K30

明理知意:复合索引优化及索引访问原理

很显然,如果我们建立一个复合索引,那么索引扫描返回行数将大大减少,这样也就大大减少了在表上访问并进行过滤数据量。...以STAFF_ID列为前导列与CREATE_DATE列一起建立复合索引后,系统马上恢复正常。不过,有人会问,为什么要使用STAFF_ID列做索引前导列,而不用CREATE_DATE列做前导列?...很多文档不是介绍说,复合索引要把选择性最好列放在最前面吗?要回答这个问题,得首先了解索引基本原理,包括Oracle数据库对索引是如何存储、是怎样通过索引来检索索引数据。...这种设计,能够使分枝节点存储更多条目,减少了分枝节点数,特别是在多列复合索引中,对于很大表,甚至可以减少B Tree树高度。...由于Oracle索引这个特性,使得IS NULL这种条件SQL不能够使用索引。但是我们可以通过建复合索引形式来使这种SQL也能够使用索引

1K70

巧用复合索引,有效降低系统IO

我们知道索引至关重要,合理索引使用能够在很大程度上改善数据库性能。然而很多人都会走入这样一个误区:走索引SQL语句性能一定比全表扫描好。真的是这样吗?...今天我们将围绕B*Tree索引使用,解读如何合理地使用索引,以及如何通过正确索引来提高性能。...接下来我们继续测试: 以下是单列索引,对之前查询条件做了修改: ? 查看执行计划: ? 此时物理读为3994. 创建复合索引,并再次执行相同操作: ? 再次查看执行计划: ?...相同操作逻辑读降为原来十分之一。说明复合索引效率在合理场景下效率更高。 但是索引真的是万能吗?我们继续测试 在没有索引情况下修改查询条件执行以下语句: ? 查看执行计划: ?...所以,并不是所有使用索引SQL性能都比全表扫描好。 前面分析到,在某些场景下,如何使用适当复合索引,能够很大程度提高性能。那么接下来我们将通过真实案例来说明,如何创建高性能复合索引

83490

MySqlMySql索引作用&&索引理解

MySqlMySql索引作用&&索引理解 索引作用 索引是与效率挂钩,所以没有索引,可能会存在问题 索引:提高数据库性能,索引是物美价廉东西了。...MySQL服务器,本质是在内存中,所有的数据库CURD操作,全部都是在内存中进行!所以索引也是如此 提高算法效率因素:1.组织数据方式2.算法本身。...常见索引分为以下几种 主键索引(primary key) 唯一索引(unique) 普通索引(index) 全文索引(fulltext)–解决中子文索引问题 创建一个海量表,在查询时候,...解决方法,创建索引 alter table EMP add index(empno); 测试看查询时间 时间变得非常快!这就是索引带来好处! 想认识索引之前,我们非常有必要先了解一下磁盘。...把整个B+树称作mysql innode db下索引结构,一般我们建表时候,就是在该结构下进行CURD,即使没有主键也是这样子,会有默认主键至此,我们已经给我们表user构建完了主键索引

22330

MySQLMySQL索引

索引操作-创建索引-组合索引  介绍 组合索引也叫复合索引,指的是我们在建立索引时候使用多个字段,例如同时使用身份证和手机 号建立索引,同样可以建立为普通索引或者是唯一索引。...复合索引使用复合最左原则。...而3和4相比where条件顺序不一样,为什么4可以用到索引呢?是因为mysql本身就有一层sql优化,他会根据sql来识别出来该用哪个索引,我们可以理解为3和4在mysql眼中是等价。...全文索引版本、存储引擎、数据类型支持情况: MySQL 5.6 以前版本,只有 MyISAM 存储 引擎支持全文索引MySQL 5.6 及以后版本,MyISAM 和 InnoDB 存储引擎均支持全文索引...-空间索引 介绍 MySQL在5.7之后版本支持了空间索引,而且支持OpenGIS几何数据模型 空间索引是对空间数 据类型字段建立索引MYSQL空间数据类型有4种,分别是GEOMETRY、POINT

3.1K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券