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

Mysql常用建立索引规则

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

2.9K10

MySQL索引规则

索引(Index)是帮助 MySQL 高效获取数据数据结构。但是索引规则有哪些呢?...索引一定要命名规范,哪个库哪个表哪几个字段哪种类型索引 选择唯一性索引——唯一性索引值是唯一,可以更快速通过该索引来确定某条记录 为经常需要排序、分组和联合操作字段建立索引 为常作为查询条件字段建立索引...尽量使用数据量少索引,大字段尽量不要使用索引,如果使用用MD5值 如果索引值很长,那么查询速度会受到影响 尽量使用前缀来索引-如果索引字段值很长,最好使用值前缀来索引 删除不再使用或者很少使用索引...最左前缀匹配原则 尽量选择区分度高列作为索引区分度公式是表示字段不重复比例 索引列不能参与计算,保持列“干净”:带函数查询不参与索引 尽量扩展索引,不要新建索引 尽量索引覆盖,不要回表操作...如果是多个索引,指定索引提高查询效率 索引固然可以提高查询效率,但是也有自己局限性,数据搜索还是适合用ElasticSearch,但是mysql要做持久化,同步ES两种方法:一种是ESjava

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

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

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

4.7K20

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)三个索引

4.9K30

MySQL索引建立方式

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

2.3K00

mysql联合索引使用规则

1’),(‘2′,’2′,’2′,’2′,’2’) 使用MySql Explain开始分析题目结果: A选项: 结果可以看出,c1,c2,c3,c4均使用到了该索引,而我们对A结果稍作更改: 将c2...下面2图我们对比下索引最左原则: 上图结果显示直接使用c3是全表查询,无法使用该索引,所以c3字段使用索引前提是c1,c2两字段均使用了索引。 即是索引最左原则(左前缀原则)。...B选项: key_len长度说明c1,c2字段用到了该索引,Extra显示并没有使用临时表进行排序,说明排序是使用了索引,但并没有计算在key_len值中,也没有起到连接c4作用,说明索引到c3这里是断掉...c1,c2,c3,c4….cN)联合索引,where 条件按照索引建立字段顺序来使用(不代表and条件必须按照顺序来写),如果中间某列没有条件,或使用like会导致后面的列不能使用索引。...索引也能用于分组和排序,分组要先排序,在计算平均值等等。所以在分组和排序中,如果字段顺序可以按照索引字段顺序,即可利用索引有序特性。

1.3K20

MySQL索引使用规则总结

如何加快查询,最直接有效办法就是增加索引,在不使用索引情况下试图采用其他方式加快查询就是在浪费时间。本文先介绍下MySQL索引基本数据结构,再对索引基本规则做下总结。...索引必要性 通过索引查找整体思路是避免遍历查找,而是通过已经建立索引结构找到目标数据, 或确认目标数据不存在,从而完成查询。...2.建立索引列需要有较好区分度。如果数据列独一无二值越多,区分度越高,索引效果越好。...InnoDB存储引擎短小主Key有助于减少辅助索引体积; 4.为字符串前缀设置索引。例如某列char(100),但大多数前10或20已经有足够区分度就没必要为整个字符串列建立索引。...创建了N个列符合索引,实际上创建了MySQL能够使用n个索引。例如某表复合索引 index(国家,省份,城市)。

3.8K00

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高级4-索引使用规则

十、前缀索引   当字段类型为字符串(varchar,text等)时,有时候需要索引很长字符串,这会让索引变得很大,查询时,浪费大量磁盘IO,影响查询效率,此时可以只将字符串一部分前缀,建立索引...18位字符来和全部数据比值也为1,即说明trade_no数据前18位也都是不重复,那么我在建立索引时候只使用前18位就可以,这样就比使用整个trader_no字段,每个数据节省2个字符空间。...十一、单列索引与联合索引   单列索引:即一个索引包含单个列   联合索引:即一个索引包含了多个列   在业务场景下,如果存在多个查询条件,考虑针对查询字段建立索引时,建议建立联合索引,而非单列索引...,而不会进行回表二次查询 十二、索引设计原则 针对于数据量较大,且查询比较频繁建立索引 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作字段建立索引 尽量选择区分度高列作为索引...,尽量建立唯一索引,区分度高,使用索引效率越高 如果是字符串类型字段,字段长度较长,可以针对字段特点,建立前缀索引 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省储存空间

35340

【说站】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索引】详解MySQL`索引`:结构、分类、性能分析、设计及使用规则

⚪filtered:表示返回结果行数占需读取行数百分比,filtered值越大越好。 6. 索引使用规则 最左前缀法则: 如果索引了多列(联合索引),要遵守最左前缀法则。...即or连接条件都需建立索引才能使得索引生效。 数据分布影响: 如果MySQL评估使用索引比全表更慢,则不使用索引。...此时可以只将字符串一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率 。...索引设计原则 1.针对于数据量较大,且查询比较频繁建立索引。 2.针对于常作为查询条件(where)、排序(order by)、分组(group by)操作字段建立索引。...3.尽量选择区分度高列作为索引,尽量建立唯一索引,区分度越高,使用索引效率越高。 4.如果是字符串类型字段,字段长度较长,可以针对于字段特点,建立前缀索引

57540

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.1K30

MySQL 字符集、校对规则索引

字符集指的是一种从二进制编码到某类字符符号映射。校对规则则是指某种字符集下排序规则。 在 MySQL 中,每一种字符集都会对应一系列校对规则。...MySQL 采用是类似继承方式来指定字符集默认值,每个数据库以及每张数据表都有自己默认值,他们逐层继承。...比如:某个库中所有表默认字符集,将是该数据库所指定字符集(这些表在没有指定字符集情况下,才会采用默认字符集) PS:整理自《Java 工程师修炼之道》 MySQL 索引使用数据结构主要有 BTree...MySQL BTree 索引使用是 B 树中 B+Tree,但在两种主要存储引擎里,它们实现方式是不同。 MyISAM: B+Tree 叶节点 data 域,存放是数据记录地址。...而其余索引都作为辅助索引,辅助索引 data 域,存储是相应记录主键值,而不是地址,这也是和 MyISAM 不同地方。

83130

MySQL排序规则导致无法命中索引问题

为每条记录检查范围(索引映射:N)(JSON 属性:message) MySQL 没有找到好索引可以使用,但发现在知道前面表列值后,可能会使用某些索引。...对于前面表中每个行组合,MySQL 检查是否可以使用范围或索引合并访问方法来检索行。这不是很快,但比执行完全没有索引连接要快。...原因 在SQL关联条件中,关联字段类型相同,并不是隐式类型转换问题导致无法命中索引,那么我们开始排查两表字符集、排序规则是否一致。...user表设计: vehicle表设计: 两表字符集均为utf8mb4,不会出现因字符集不同导致隐式转换问题,那么对比排序规则发现两表排序规则是不同,排序规则不一致时,MySQL同样会进行强制类型转换...知识扩展 MySQL隐式转换导致无法命重索引情况: If one or both arguments are NULL, the result of the comparison is NULL,

24030

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

索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定物理空间,如果要建立聚簇索引,那么需要空间就会更大。...建索引几大原则 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数据库建立索引,提高性能秘诀

索引优化 建议在经常作查询选择字段、经常作表连接字段以及经常出现在order by、group by、distinct 后面的字段中建立索引。...,具体包括:拆分后业务清晰,拆分规则明确、系统之间整合或扩展容易、数据维护简单。...存储空间:MyISAM可被压缩,占据存储空间较小,支持静态表、动态表、压缩表三种不同存储格式。InnoDB需要更多内存和存储,它会在主内存中建立其专用缓冲池用于高速缓冲数据和索引。...AUTO_INCREMENT:在MyISAM中,可以和其他字段一起建立联合索引。引擎自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,它可以根据前面几列进行排序后递增。...千万级MySQL数据库建立索引事项及提高性能手段 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及列上建立索引

3.6K10

利用LuceneIndexWriter建立索引(详解)

利用LuceneIndexWriter建立索引(详解) /*  * 建立索引,然后把建立文档添加到索引中去  * 提示先使用Document和Field把Field加入到Document中去,  ...* 接着把Document建立成为一个索引  * */ package comThree; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer...org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; public class BookIndex{ //创建索引目录...------------->>>>>"); try{ System.out.println("开始创建索引-------------------->>>>"); //创建索引实例 IndexWriter...writer.close(); System.out.println("完成索引创建并且存储完毕, 索引存放位置在:" + INDEX_PATH); }catch(IOException e){ e.printStackTrace

52010
领券