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

浅谈索引优缺点和建立索引原则

索引优点 索引缺点 建索引几大原则 索引优点 通过创建唯一性索引,可以保证数据库表中每一行数据唯一性。 可以大大加快数据检索速度,这也是创建索引最主要原因。...索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定物理空间,如果要建立聚簇索引,那么需要空间就会更大。...建索引几大原则 1.最左前缀匹配原则,非常重要原则mysql会一直向右匹配直到遇到范围查询(>、 3 and...d = 4 如果建立(a,b,c,d)顺序索引,d是用不到索引,如果建立(a,b,d,c)索引则都可以用到,a,b,d顺序可以任意调整。...=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql查询优化器会帮你优化成索引可以识别的形式 3.尽量选择区分度高列作为索引,区分度公式是

3.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL设计索引原则

    搜索索引列,不一定是所要选择列。 换句话说,最适合索引列是出现在 WHERE 子句中列,或连接子句中指定列,而不是出现在 SELECT 关键字后选择列表中列 。 2. 使用惟一索引。...更为重要是,对于较短键值,索引高速缓存中块能容纳更多键值,因此, MySQL也可以在内存中容纳更多值。这增加 了找到行而不用读取索引中较多块可能性。 (当然,应该利用一些常识。...如仅用列值第一个字符进行索引是不可能有多大好处 ,因为这个索引中不会有许多不 同值。) 4. 利用最左前缀。 在创建 一个 n 列索引时,实际是创建了 MySQL 可利用 n 个索引。...多列索引可起几个索引作用,因为可利用索引中最左边列集来匹配行。这样列 集 称为最左前缀。(这与索引一个列前缀不同,索引一个列前缀是利用该前 n 个 字符作为索引值。) 5....此外, MySQL 在生成一个执行计划时,要考虑各个索引,这也要费时间。创建多余 索引给查询优化带来了更多工作。索引太多,也可能会使 MySQL 选择不到所要使用最好索引

    73730

    mysql创建索引原则

    mysql中使用索引原则有以下几点: 1、 对于查询频率高字段创建索引; 2、 对排序、分组、联合查询频率高字段创建索引; 3、 索引数目不宜太多 原因:a、每创建一个索引都会占用相应物理控件...在上面的创建语句中,只有mysql语句在使用到StudentNo字段时,索引才会被启用。...唯一性索引值是唯一,可以更快速通过该索引来确定某条记录。...例如,学生表中学号是具有唯一性字段。为该字段建立唯一性索引可以很快的确定某个学生信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。...6、尽量使用数据量少索引 如果索引值很长,那么查询速度会受到影响。

    2.6K10

    Mysql合理建立索引,索引优化

    什么是索引 MySQL官方对索引定义为:索引(Index)是帮助MySQL高效获取数据数据结构。 我们可以简单理解为:快速查找排好序一种数据结构。...Mysql索引主要有两种结构:B+Tree索引和Hash索引索引就相当于字典前目录,如果这个目录划分规划更好,那么我们找到想要数据就会更方便,也就提高了查询效率。...建立索引场景 索引不是越多越好,因为每次更新、插入数据,就需要对索引文件进行变动,会减低该类型操作执行效率。 如果建立索引字段太多,影响就会很大。 所以我们只在合理字段上建立索引。...123456 否则发生类型转换,索引失效,其他类型字段 比如日期等 也同理 当使用条件语句,预计结果数量超过全表数据一定比例时,会转为全表扫描(mysql一般是30%左右)这就是为什么在建立索引时候要选择维度...组合索引时使用条件语句。 上面举例一些场景都是比较容易理解。组合索引还没涉及,往下继续介绍。 mysql中,多个索引同时使用?

    4.8K20

    MySQL索引设计原则

    MySQL索引设计原则索引设计原则一: 针对sql语句中where,order by,group by条件设计索引。...并且注意where,order by,group by后面跟字段顺序,是不是某个联合索引最左侧字段开始部分字段 索引设计原则二: 需要考虑字段基数问题,一般建立索引尽量使用那些基数较大字段,...索引设计原则三 尽量对那些字段类型较小字段来设计索引。...,也就是对该字段前20个字符建立索引,通俗来讲就是将该字段前20个字符值放在索引树里。...也就是前缀索引 建立方式:KEY my_index(name(20),age,course) 这时通过该策略建立索引,当你在where条件搜索时,如果是根据name来搜索,此时就会先到索引树中name

    23620

    mysql建立联合索引_mysql之联合索引

    大家好,又见面了,我是你们朋友全栈君。 mysql之联合索引测试: 前期准备: 建立联合索引?...,则该索引仅出现在key列表中 rows: 根据表统计信息及索引选用情况,大致估算出找到所需记录所需要读取行数 Extra: 1、Using filesort : mysql对数据使用一个外部索引排序...也就是说mysql无法利用索引完成排序操作成为“文件排序” 2、Using temporary: 使用临时表保存中间结果,也就是说mysql在对查询结果排序时使用了临时表,常见于order by 和...当type出现ref或者index时,表示走索引,index是标准不重复索引,ref表示虽然使用了索引,但是索引列中有重复值,但是就算有权重复值,也只是在重复值 范围内小范围扫描,不造成重大性能影响...测试语句是否使用了索引: 网上说联合索引 test_col1_col2_col3 实际建立了(col1)、(col1,col2)、(col,col2,col3)三个索引

    5K30

    MySQL查询索引原则

    文章目录 等值匹配原则 最左前缀匹配原则 范围查找规则 等值匹配+范围查找 Order By + limit 优化 分组查询优化 总结 MySQL 是如何帮我们维护非主键索引 等值匹配原则 我们现在已经知道了如果是...【主键索引】,在插入数据时候是根据主键顺序依次往后排列,一个数据页不够就会分裂到另外一个数据页,然后再通过索引页来维护数据页。...参考 数据页之间是通过双向链表来维护索引页如果过多就会往上分裂(就像上面这张图),以此类推,这样就形成了由组件组成 B+ 树结构,即【聚簇索引】 但是问题是我们不仅建立了主键索引,同时也建立了非主键索引...,那这时候非主键索引是如何维护呢?...因为对于主键索引是不可能重复,所

    1.1K30

    MySQL索引建立方式

    MySQL索引建立对于MySQL高效运行是很重要索引可以大大提高MySQL检索速度。...打个比方,如果合理设计且使用索引MySQL是一辆兰博基尼的话,那么没有设计和使用索引MySQL就是一个人力三轮车。...拿汉语字典目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序目录(索引)快速查找到需要字。 索引分单列索引和组合索引。...上面都在说使用索引好处,但过多使用索引将会造成滥用。因此索引也会有它缺点:虽然索引大大提高了查询速度,同时却会降低更新表速度,如对表进行INSERT、UPDATE和DELETE。...因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。 建立索引会占用磁盘空间索引文件。 ---- 普通索引 创建索引 这是最基本索引,它没有任何限制。

    2.3K00

    Mysql常用建立索引规则

    建立索引规则 建立索引常用规则如下: 表主键、外键必须有索引; 数据量超过300表应该有索引; 经常与其他表进行连接表,在连接字段上应该建立索引; 经常出现在Where子句中字段,非凡是大表字段...,应该建立索引索引应该建在选择性高字段上(枚举型字段不建索引); 索引应该建在小字段上,对于大文本字段甚至超长字段,不要建索引; 复合索引建立需要进行仔细分析;尽量考虑用单字段索引代替: 正确选择复合索引主列字段...; 假如既有单字段索引,又有这几个字段上复合索引,一般可以删除复合索引; 频繁进行数据操作表,不要建立太多索引; 删除无用索引,避免对执行计划造成负面影响; ​ 以上是一些普遍建立索引判定依据...一言以蔽之,索引建立必须慎重,对每个索引必要性都应该经过仔细分析,要有建立依据。...因为太多索引与不充分、不正确索引对性能都毫无益处:在表上建立每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上开销。 ​

    2.9K10

    MySQL理解索引、添加索引原则

    索引用于快速找出在某个列中有一特定值行。不使用索引MySQL必须从第1条记录开始然后读完整个表直到找出相关行,还需要考虑每次读入数据页IO开销。...尽量减少like,但不是绝对不可用,”xxxx%” 是可以用到索引, 想象一下,你在看一本成语词典,目录是按成语拼音顺序建立,查询需求是,你想找以 “一”字开头成语(”一%“),和你想找包含一字成语...=则不行 原则    1,单表数据太少,索引反而会影响速度;更新非常频繁数据不适宜建索引    2,where后条件,order by ,group by 等这样过滤时,后面的字段最好加上索引。...如:建立 姓名、年龄、性别的复合索引。...索引原则 1.索引越少越好 原因:主要在修改数据时,第个索引都要进行更新,降低写速度。 2.最窄字段放在键左边 3.避免file sort排序,临时表和表扫描.

    1.7K31

    MySQL索引需要原则

    如果为其建立索引,可以有效地避免排序操作。 3.为常作为查询条件字段建立索引 如果某个字段经常用来做查询条件,那么该字段查询速度会影响整个表查询速度。...8.最左前缀匹配原则,非常重要原则。...mysql会一直向右匹配直到遇到范围查询(>、 3 and d = 4 如果建立(a,b,c,d)顺序索引...比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql查询优化器会帮你优化成索引可以识别的形式 10.尽量选择区分度高列作为索引。...比如表中已经有a索引,现在要加(a,b)索引,那么只需要修改原来索引即可 注意:选择索引最终目的是为了使查询速度变快。上面给出原则是最基本准则,但不能拘泥于上面的准则。

    1.7K20

    MySQL建立索引优点和缺点

    大家好,又见面了,我是你们朋友全栈君。 建立索引优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统性能。...第二、索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定物理空间。如果要建立聚簇索引,那么需要空间就会更大。...第三、当对表中数据进行增加、删除和修改时候,索引也要动态维护,这样就降低了数据维护速度。 什么样字段适合创建索引: 索引建立在数据库表中某些列上面。...建立索引,一般按照selectwhere条件来建立,比如: select条件是where f1 and f2,那么如果我们在字段f1或字段f2上简历索引是没有用,只有在字段f1和f2上同时建立索引才有用等...(普通索引) mysql> alter table table_name add index index_name ( `column` ) 5.多列索引 (聚簇索引) mysql

    2.2K20

    MySQL索引篇,索引优缺点,分类及设计原则

    索引在数据库中作用是快速找出某个列中一个特定值行,不使用索引的话,MySQL必须从第一条记录遍历到相关行,表越大,花费时间越多,但是如果有索引,就能快速到达某个位置去搜索数据文件,索引对于优化数据库查询速度有着不可替代作用...,本文主要给大家讲解一下MySQL数据库中,索引优缺点,分类以及设计原则。...3.单列索引:只包含一个列索引,一个表中可以有多个。 4.组合索引:包含多个列索引,查询条件包含这些列最左边字段时候,索引就会被引用,遵循最左缀原则。...创建空间索引列必须声明为非空值(NOT NULL),仅支持MyISAM存储引擎。 ? 索引设计原则 1.不是越多越好。 2.常更新表越少越好。 3.数据量小表最好不要建立索引。...4.不同值比较多列才需要建立索引。 5.某种数据本身具备唯一性时候,建立唯一性索引,可以保证定义数据完整性,以提高查询熟度。

    2K20

    B+树|MYSQL索引使用原则

    MySQL 中,主要有四种类型索引,分别为: B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。...InnoDB是Mysql默认存储引擎(Mysql5.5.5之前是MyISAM) 可能对于没有了解过索引猿友这样看这篇文章十分吃力,这类猿友有必要先对Mysql索引有个大体了解,可以看看小宝鸽另外一篇文章...(稀疏索引),叶子结点相当于是存储(关键字)数据数据层; 4.更适合文件索引系统; 三、建索引几大原则 1.最左前缀匹配原则,非常重要原则mysql会一直向右匹配直到遇到范围查询(>、 3 and d = 4 如果建立(a,b,c,d)顺序索引,d是用不到索引,如果建立(a,b,d,c)索引则都可以用到,...=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql查询优化器会帮你优化成索引可以识别的形式 3.尽量选择区分度高列作为索引,区分度公式是

    45720

    【说站】mysql有哪些建立索引方法

    mysql有哪些建立索引方法 1、最左前缀匹配原则,非常重要原则mysql会一直向右匹配直到遇到范围查询(>、 3 and d = 4 如果建立(a,b,c,d)顺序索引,d是用不到索引,如果建立(a,b,d,c)索引则都可以用到,a,b,d顺序可以任意调整。...2、=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql查询优化器会帮你优化成索引可以识别的形式 3、尽量选择区分度高列作为索引,...所以语句应该写成create_time = unix_timestamp(’2014-05-29’); 以上就是mysql建立索引方法,大家学会后也试着建立索引吧。...更多mysql学习指路:MySQL 推荐操作系统:windows7系统、mysql5.8、DELL G3电脑

    1.4K20

    MySQL联合索引、覆盖索引及最左匹配原则

    叶老师GreatSQL社区这篇文章《3.联合索引、覆盖索引及最左匹配原则|MySQL索引学习》,不仅适用于GreatSQL、MySQL,从原理层,对Oracle等数据库同样是通用。...在数据检索过程中,经常会有多个列匹配需求,接下来给出一些联合索引使用以及最左匹配原则案例。...最左匹配原则作用在联合索引中,假如表中有一个联合索引(tcol01, tcol02, tcol03),只有当SQL使用到tcol01、tcol02索引前提下,tcol03索引才会被使用,同理只有tcol01...建一个联合索引(tcol01, tcol02, tcol03),相当于建立三个索引(tcol01)、(tcol01, tcol02)、(tcol01, tcol02, tcol03)功能。...tcol02=50; (2) 创建联合索引时候,要将区分度高字段放在前面,假如有一张学生表包含学号和姓名,那么在建立联合索引时候,学号放在姓名前面,因为学号是唯一性,能过滤更多数据。

    4.1K31

    MySQL建立自己哈希索引(书摘备查)

    MySQL中,只有Memory存储引擎支持显式哈希索引,但是可以按照InnoDB使用方式模拟自己哈希索引。这会让你得到某些哈希索引特性,例如很大键也只有很小索引。...想法非常简单:在标准B-Tree索引上创建一个伪哈希索引。它和真正哈希索引不是一回事,因为它还是使用B-Tree索引进行查找。然而,它将会使用键哈希值进行查找,而不是键自身。...通常会按照下面的方式来查找URL表: select id from url where url='http://www.mysql.com'; 但是,如果移除url列上索引并给表添加一个被索引...//www.mysql.com'); 这种方式很不错,因为MysSQL查询优化器注意到url_crc列上有很小、选择性很高索引,并且它会使用里面的值进行索引查找。...://www.mysql.com'); 哈希碰撞几率增长比想象要快。

    2.2K30

    如何理解 MySQL 索引最左匹配原则

    不胜感激; 言归正传,回到今天要说 MySQL 索引最左匹配原则问题; 测试表结构,有三个字段,分别是 id,name,cid CREATE TABLE `stu` ( `id` int(11)...疑问是:SQL 查询用到索引条件是必须要遵守最左前缀原则,为什么上面两个查询还能用到索引?...要想用到这种类型索引,对这个索引并无特别要求,只要是索引,或者某个复合索引一部分,MySQL 都可能会采用 Index 类型方式扫描。...但是呢,缺点是效率不高,MySQL 会从索引第一个数据一个个查找到最后一个数据,直到找到符合判断条件某个索引。...这就是所谓 MySQL 为什么要强调最左前缀原则原因。 那么什么时候才能用到呢? 当然是 cid 字段索引数据也是有序情况下才能使用咯,什么时候才是有序呢?

    3.7K40
    领券