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

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

索引优点 索引缺点 建索引几大原则 索引优点 通过创建唯一性索引,可以保证数据库表每一行数据唯一性。 可以大大加快数据检索速度,这也是创建索引最主要原因。...建索引几大原则 1.最左前缀匹配原则,非常重要原则mysql会一直向右匹配直到遇到范围查询(>、 3 and...=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql查询优化器会帮你优化成索引可以识别的形式 3.尽量选择区分度高列作为索引,区分度公式是...7.like 模糊查询,右模糊查询(321%)会使用索引,而%321 和%321%会放弃索引而使用全局扫描 应该建立索引情况 在经常需要搜索列上,可以加快搜索速度; 在作为主键列上,强制该列唯一性和组织表数据排列结构...不应该建立索引情况 对于那些在查询很少使用或者参考列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。

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

MySQL设计索引原则

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

71930

mysql创建索引原则

mysql中使用索引原则有以下几点: 1、 对于查询频率高字段创建索引; 2、 对排序、分组、联合查询频率高字段创建索引; 3、 索引数目不宜太多 原因:a、每创建一个索引都会占用相应物理控件...;    b、过多索引会导致insert、update、delete语句执行效率降低; 4、若在实际,需要将多个列设置索引时,可以采用多列索引 如:某个表(假设表名为...在上面的创建语句中,只有mysql语句在使用到StudentNo字段时,索引才会被启用。...例如,学生表中学号是具有唯一性字段。为该字段建立唯一性索引可以很快的确定某个学生信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。...表数据被大量更新,或者数据使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作影响

2.4K10

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

常见可以用于建立索引字段场景: ① 用户id 在订单表用户id字段上建立索引,根据用户id筛选订单,则会很快查询出用户订单。...用户一般是在自己后台查看订单,所以表其他用户数据与他无关,如果没有建立索引,每次查询都是全表扫描,则会很慢。...组合索引时使用条件语句。 上面举例一些场景都是比较容易理解。组合索引还没涉及,往下继续介绍。 mysql,多个索引同时使用?...问题:该语句有几个索引生效? 是2个吗?并不是这样子。 虽然两个字段索引都没有问题,如果单独使用也都能生效。 但是:MySQL会从可用索引猜测出效率最高一个索引并使用它 怎么证明?...只在维度高字段上建立索引,否则会使得数据比例过大,转为全表扫描。 优先对数据量比较小字段建立索引,可以使索引文件更小,同时内存也可以装载更多索引键。

4.7K20

MySQL索引设计原则

MySQL索引设计原则索引设计原则一: 针对sql语句中where,order by,group by条件设计索引。...并且注意where,order by,group by后面跟字段顺序,是不是某个联合索引最左侧字段开始部分字段 索引设计原则二: 需要考虑字段基数问题,一般建立索引尽量使用那些基数较大字段,...索引设计原则三 尽量对那些字段类型较小字段来设计索引。...也就是前缀索引 建立方式:KEY my_index(name(20),age,course) 这时通过该策略建立索引,当你在where条件搜索时,如果是根据name来搜索,此时就会先到索引name...对于前缀索引,仅仅包含部分字符到索引,where查询是可以使用,但是order by和group by就用不上了 索引设计原则四 设计索引需要考虑到数据插入更新时索引树也会进而更新,以及主键一定要是自增

21220

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

大家好,又见面了,我是你们朋友全栈君。 mysql之联合索引测试: 前期准备: 建立联合索引?...,则该索引仅出现在key列表 rows: 根据表统计信息及索引选用情况,大致估算出找到所需记录所需要读取行数 Extra: 1、Using filesort : mysql对数据使用一个外部索引排序...也就是说mysql无法利用索引完成排序操作成为“文件排序” 2、Using temporary: 使用临时表保存中间结果,也就是说mysql在对查询结果排序时使用了临时表,常见于order by 和...就是select列表字段,只用从索引中就能获取,不必根据索引再次读取数据文件,换句话说查询列要被所建索引覆盖。...测试语句是否使用了索引: 网上说联合索引 test_col1_col2_col3 实际建立了(col1)、(col1,col2)、(col,col2,col3)三个索引

4.8K30

MySQL查询索引原则

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

1.1K30

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

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

4K31

MySQL索引建立方式

MySQL索引建立对于MySQL高效运行是很重要索引可以大大提高MySQL检索速度。...打个比方,如果合理设计且使用索引MySQL是一辆兰博基尼的话,那么没有设计和使用索引MySQL就是一个人力三轮车。...因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。 建立索引会占用磁盘空间索引文件。 ---- 普通索引 创建索引 这是最基本索引,它没有任何限制。...以下实例为在表添加索引mysql> ALTER TABLE testalter_tbl ADD INDEX (c); 你还可以在 ALTER 命令中使用 DROP 子句来删除索引。...---- 显示索引信息 你可以使用 SHOW INDEX 命令来列出表相关索引信息。可以通过添加 \G 来格式化输出信息。

2.3K00

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

索引用于快速找出在某个列中有一特定值行。不使用索引MySQL必须从第1条记录开始然后读完整个表直到找出相关行,还需要考虑每次读入数据页IO开销。...=则不行 原则    1,单表数据太少,索引反而会影响速度;更新非常频繁数据不适宜建索引    2,where后条件,order by ,group by 等这样过滤时,后面的字段最好加上索引。...所以,大多数情况下,有AB索引了,就可以不用在去建一个A索引了 详解: 联合索引又叫复合索引。对于复合索引:Mysql从左到右使用索引字段,一个查询可以只使用索引一部份,但只能是最左侧部分。...如:建立 姓名、年龄、性别的复合索引。...索引原则 1.索引越少越好 原因:主要在修改数据时,第个索引都要进行更新,降低写速度。 2.最窄字段放在键左边 3.避免file sort排序,临时表和表扫描.

1.7K31

Mysql常用建立索引规则

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

2.9K10

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列上有很小、选择性很高索引,并且它会使用里面的值进行索引查找。...你可以手工进行维护,在MySQL 5.0及以上版本,可以使用触发器来进行维护。下面的例子显示了触发器如何在插入和更新值时候维护url_crc列。

2.1K30

MySQL索引需要原则

8.最左前缀匹配原则,非常重要原则。...mysql会一直向右匹配直到遇到范围查询(>、 3 and d = 4 如果建立(a,b,c,d)顺序索引...比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql查询优化器会帮你优化成索引可以识别的形式 10.尽量选择区分度高列作为索引。...比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树都是数据表字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本...比如表已经有a索引,现在要加(a,b)索引,那么只需要修改原来索引即可 注意:选择索引最终目的是为了使查询速度变快。上面给出原则是最基本准则,但不能拘泥于上面的准则。

1.6K20

MySQL建立索引优点和缺点

大家好,又见面了,我是你们朋友全栈君。 建立索引优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统性能。...第三、当对表数据进行增加、删除和修改时候,索引也要动态维护,这样就降低了数据维护速度。 什么样字段适合创建索引: 索引建立在数据库表某些列上面。...建立索引,一般按照selectwhere条件来建立,比如: select条件是where f1 and f2,那么如果我们在字段f1或字段f2上简历索引是没有用,只有在字段f1和f2上同时建立索引才有用等...; 查看表索引方法: show index from table_name; 查看索引 索引类型及创建例子:: 1.PRIMARY KEY (主键索引mysql> alter table table_name...(普通索引) 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.某种数据本身具备唯一性时候,建立唯一性索引,可以保证定义数据完整性,以提高查询熟度。

1.9K20

B+树|MYSQL索引使用原则

MySQL ,主要有四种类型索引,分别为: B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。...不仅仅在 MySQL 是如此,实际上在其他很多数据库管理系统B-Tree 索引也同样是作为最主要索引类型,这主要是因为 B-Tree 索引存储结构在数据库数据检索中有非常优异表现。...(稀疏索引),叶子结点相当于是存储(关键字)数据数据层; 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.尽量选择区分度高列作为索引,区分度公式是

40820

【说站】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、尽量选择区分度高列作为索引,...= ’2014-05-29’就不能使用到索引,原因很简单,b+树都是数据表字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。...所以语句应该写成create_time = unix_timestamp(’2014-05-29’); 以上就是mysql建立索引方法,大家学会后也试着建立索引吧。

1.4K20

Mysql索引

单列索引:索引只包含一个列。 组合索引:在多个字段上建立索引,只有在查询条件顺序使用了这些索引,索引才有效果。使用组合索引遵循最左前缀原则。...全文索引可以在CHAR、VARCHAR或者TEXT类型列上创建 SPATIL(空间索引):空间索引是对空间数据类型字段建立索引MySQL空间数据类型有4种,分别是GEOMETRY、POINT...创建空间索引列必须声明为NOT NULL image-20210616154139828 常见问题 索引为什么要使用B+树 聚簇索引和非聚簇索引区别 索引什么时候会失效,最左匹配原则是什么 sql...B+树演变 二叉查找树(二叉搜索树):不平衡 img 我们为 user 表(用户信息表)建立了一个二叉查找树索引。...图中每个节点称为页,页就是我们上面说磁盘块,在MySQL数据读取基本单位是页,所以我们这里叫做页更符合MySQL索引底层数据结构。

3.3K20
领券