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

MySQL索引需要原则

1.选择唯一性索引 唯一性索引值是唯一,可以更快速通过该索引来确定某条记录。例如,学生表中学号是具有唯一性字段。为该字段建立唯一性索引可以很快的确定某个学生信息。...因此,为这样字段建立索引,可以提高整个表查询速度。 4.限制索引数目 索引数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要磁盘空间就越大。修改表时,对索引重构和更新很麻烦。...越多索引,会使更新表变得很浪费时间。 5.尽量使用数据量少索引 如果索引值很长,那么查询速度会受到影响。...mysql会一直向右匹配直到遇到范围查询(>、 3 and d = 4 如果建立(a,b,c,d)顺序索引...比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql查询优化器会帮你优化成索引可以识别的形式 10.尽量选择区分度高列作为索引

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

    mysql索引多了有什么坏处

    建立索引常用规则如下: 1、表主键、外键必须有索引; 2、数据量超过300表应该有索引; 3、经常与其他表进行连接表,在连接字段上应该建立索引; 4、经常出现在Where子句中字段,特别是大表字段...,应该建立索引; 5、索引应该建在选择性高字段上; 6、索引应该建在小字段上,对于大文本字段甚至超长字段,不要索引; 7、复合索引建立需要进行仔细分析;尽量考虑用单字段索引代替:  A、正确选择复合索引主列字段...,考虑减少复合字段;  C、如果复合索引中包含字段经常单独出现在Where子句中,则分解为多个单字段索引; 进行数据操作表,不要建立太多索引; 9、删除无用索引,避免对执行计划造成负面影响...一言以蔽之,索引建立必须慎重,对每个索引必要性都应该经过仔细分析,要有建立依据。...因为太多索引与不充分、不正确索引对性能都毫无益处:在表上建立每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上开销。

    2.7K20

    mysql 如何索引_mysql如何添加索引

    mysql添加索引方法:可以通过【create table】语句来添加,如【CONSTRAINT PRIMARY KEY | INDEX [] [] 】,表示创建一般索引。...在mysql中可以在创建表(CREATE TABLE)同时创建索引;也可以在创建表后创建索引,使用CREATE INDEX语句或ALTER TABLE 语句。...(视频教程推荐:mysql视频教程) 1、使用CREATE INDEX语句 可以使用专门用于创建索引 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。...指定使用列前 length 个字符来创建索引。使用列一部分创建索引有利于减小索引文件大小,节省索引列所占空间。在某些情况下,只能对列前缀进行索引。...索引长度有一个最大上限 255 个字节(MyISAM 和 InnoDB 表最大上限为 1000 个字节),如果索引长度超过了这个上限,就只能用列前缀进行索引

    7.3K20

    mysql索引优点及几大原则

    索引优点:   最常见B-Tree索引,按照顺序存储数据,所以MYSQL可以用来做order by和group by操作。因为数据是有序,所以B-Tree也就会将相关列值存储在一起。...mysql索引几大原则 1.选择唯一性索引   唯一性索引值是唯一,可以更快速通过该索引来确定某条记录。例如,学生表中学号是具有唯一性字段。...因此,为这样字段建立索引,可以提高整个表查询速度。 4.限制索引数目   索引数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要磁盘空间就越大。...7.最左前缀匹配原则   当对多个列同时索引时,MySQL会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配 聚簇索引(Clustered Indexes)   聚簇索引并不是一种单独索引类型...具体细节依赖于其实现方式,InnoDB聚族索引实际上在同一个结构中保存了B-Tree索引和数据行。当表有聚族索引时,它数据行存放在索引叶子页中。

    95300

    【Oracle】-【索引】先查数据再索引,还是先索引再插数据?

    问题: 1、新建一个表结构,创建索引,将百万或千万级数据使用insert导入该表。 2、新建一个表结构,将百万或千万级数据使用isnert导入该表,再创建索引。 这两种效率哪个高呢?...我感觉无论先还是后索引,当有数据时都需要update索引数据,问题是有索引情况下插数据与有数据情况下建立索引,各自消耗。...总结: 如果先建立索引再插入数据,每次插入数据还需要修改索引信息。 实战还要看业务要求,有的业务可能还需要索引和约束对数据进行校验,这样就应该先建立索引了。...如果是一次性处理,原则上先插数据后索引。...另外问题: 使用nologging可以提高几秒钟,但使用parallel没变化,环境是虚机,4个物理CPU,8个虚拟CPU,这里parallel应该如何设置呢?也请高手指教!

    2.8K30

    好文 | MySQL 索引B+树原理,以及索引几大原则

    MySQL 中,主要有四种类型索引,分别为:B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。...B-Tree 索引MySQL 数据库中使用最为频繁索引类型,除了 Archive 存储引擎之外其他所有的存储引擎都支持 B-Tree 索引。...InnoDB是Mysql默认存储引擎(Mysql5.5.5之前是MyISAM) 接下来我们先看看B-树、B+树概念。弄清楚,为什么加了索引查询速度会加快?...四、索引几大原则 1、最左前缀匹配原则,非常重要原则,mysql会一直向右匹配直到遇到范围查询(>、 3...比如表中已经有a索引,现在要加(a,b)索引,那么只需要修改原来索引即可。 关注Java技术栈微信公众号,在后台回复关键字:mysql,可以获取更多栈长整理MySQL数据库干货。

    1K10

    mysql如何使用前缀索引_MySQL前缀索引你是如何使用

    大家好,又见面了,我是你们朋友全栈君。 灵魂3连问: 什么是前缀索引? 前缀索引也叫局部索引,比如给身份证前 10 位添加索引,类似这种给某列部分信息添加索引方式叫做前缀索引。...为什么要用前缀索引? 前缀索引能有效减小索引文件大小,让每个索引页可以保存更多索引值,从而提高了索引查询速度。...0.5,那么我们需要继续加大前缀字符长度,但是这个时候前缀索引优势已经不明显,就没有创建前缀索引必要了。...举例说明: 当要索引列字符很多时 索引则会很大且变慢 ( 可以只索引列开始部分字符串 节约索引空间 从而提高索引效率 ) 原则: 降低重复索引值 例如现在有一个地区表 areagdpcode chinaShanghai...貌似查询时间更长了 因为只第一位字符而言索引重读性太大了 200万条数据全以数字开头那么平均20万条数据都是相同索引值 重新建立前缀索引 这次以前4位字符来创建 alter table x_test

    2.5K20

    MySQL如何利用索引

    一、前言 在MySQL中进行SQL优化时候,经常会在一些情况下,对MySQL能否利用索引有一些迷惑。例如: MySQL 在遇到范围查询条件时候就停止匹配了,那么到底是哪些范围条件?...MySQL 在LIKE进行模糊匹配时候又是如何利用索引呢? MySQL 到底在怎么样情况下能够利用索引进行排序?...四、Between 和Like 处理 那么如果查询中存在between 和like,MySQL如何进行处理呢?...,通过这篇文章,想必大家应该了解到MySQL大部分情况下是如何利用索引。...近期热文 •Spring Cloud Alibaba系列教程-05-Sentinel入门与整合•记一次非常有趣MySQL调优经历。•如何发现 Redis 热点 Key ,解决方案有哪些?

    90240

    MySQL】分区字段列是否有必要再单独索引

    对于分区字段必须是主键一部分,那么建了复合主键之后,是否需要对分许字段再单独添加一个索引呢?有没有效果?...idx_ctime 5、分析添加索引执行计划 结果为: id select_type table partitions tpye possible_keys key key_len ref rows...分了区,只能说该字段为某个值记录会在某个分区里面,但不是索引,还要一顿好找。 有时候,主键不等于分区依据列,这时候主键又想聚集索引的话,那么必须包含分区依据列,搞成复合主键。...那么,这种情况下,分区依据列不就有索引了吗?...是的,可是它不够快,如果在这个复合索引里面,分区依据列不排在第一位,就不够快,如果查找语句里常常用分区依据列作为过滤条件,就有必要为分区依据列额外单独建立一个索引

    2.5K30

    MySQL索引重建?如何操作?

    ,针对MySQL数据库,不像Oracle数据库中有支持索引重建语法(ALTER INDEX … REBUILD),在MySQL数据库中,重建索引具体有哪些方案呢?...相信大家也非常熟悉了; 二、 ALTER TABLE Method 在验证之前,我们需要先知道如何可以查看MySQL中找到索引创建或修改时间,可以通过如下方式间接进行查看: 1、表创建时间...,可以间接推断索引创建时间。...因为索引创建时间肯定在表创建时间之后。 2、对应表idb文件修改或创建时间,当然这种方法不是非常准确。...对于InnoDB存储引擎表而言,对应索引数据存储在ibd文件中,所以文件创建时间或修改时间是间接判断索引创建时间。如果存储引擎为MyISAM的话,还有专门索引文件MYI。

    4.1K00

    【63期】谈谈MySQL 索引,B+树原理,以及索引几大原则(MySQL面试第六弹)

    MySQL 中,主要有四种类型索引,分别为:B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。...B-Tree 索引MySQL 数据库中使用最为频繁索引类型,除了 Archive 存储引擎之外其他所有的存储引擎都支持 B-Tree 索引。...当然,可能各种数据库(或 MySQL 各种存储引擎)在存放自己 B-Tree 索引时候会对存储结构稍作改造。...InnoDB是Mysql默认存储引擎(Mysql5.5.5之前是MyISAM) 可能对于没有了解过索引猿友这样看这篇文章十分吃力,这类猿友有必要先对Mysql索引有个大体了解。...; 更适合文件索引系统; 三、索引几大原则 1.最左前缀匹配原则,非常重要原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b

    81510

    MySQL如何强制指定索引

    MySQL如何强制指定索引一、介绍在平常慢SQL优化过程中,往往会出现走不到索引情况。有时候,确实是因为写查询条件太差劲导致。...但有时,明明就是有索引,查询条件也写对,可就偏偏走到了另外一条索引上。这种情况往往发生在连表过程中,因为我们连表通常是使用id与ref_id进行关联,偶尔会附带一些其他条件。...那么,该如何指定索引呢?...,这边是允许MySQL,如果有更好索引,就选择更好索引。...三、最后其实,我并不推荐这种指定索引方式。强制索引可能会导致性能问题,一杆子打死,对后面优化器选择最优索引不利。在大多数情况下,我们是没有必要强制指定索引

    38820

    MySqlMySql索引作用&&索引理解

    MySqlMySql索引作用&&索引理解 索引作用 索引是与效率挂钩,所以没有索引,可能会存在问题 索引:提高数据库性能,索引是物美价廉东西了。...MySQL服务器,本质是在内存中,所有的数据库CURD操作,全部都是在内存中进行!所以索引也是如此 提高算法效率因素:1.组织数据方式2.算法本身。...磁盘是计算机中一个机械设备,相比于计算机其他电子元件,磁盘效率是比较低,在加上IO本身特征,可以知道,如何提交效率,是 MySQL 一个重要话题。...所以要提高效率,我们要有两个角度进行考量:第一个角度是在单page时候如何提高一个Page内部链式遍历效率;另一个是多Page时候怎么解决Page间进行查找效率。所以我们有了页目录出现。...把整个B+树称作mysql innode db下索引结构,一般我们时候,就是在该结构下进行CURD,即使没有主键也是这样子,会有默认主键至此,我们已经给我们表user构建完了主键索引

    23730

    MySQLMySQL索引

    索引操作-全文索引 索引操作-空间索引 索引验证 索引特点 介绍 索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有一特定值行,不使用索 引,MySQL必须从第一条记录开始读完整个表...而3和4相比where条件顺序不一样,为什么4可以用到索引呢?是因为mysql本身就有一层sql优化,他会根据sql来识别出来该用哪个索引,我们可以理解为3和4在mysql眼中是等价。...全文索引版本、存储引擎、数据类型支持情况: MySQL 5.6 以前版本,只有 MyISAM 存储 引擎支持全文索引MySQL 5.6 及以后版本,MyISAM 和 InnoDB 存储引擎均支持全文索引...; 只 有字段数据类型为 char、varchar、text 及其系列才可以全文索引; 在数据量较大时候,现将 数据放入一个没有全局索引表中,然后再用create index创建fulltext索引...-空间索引 介绍 MySQL在5.7之后版本支持了空间索引,而且支持OpenGIS几何数据模型 空间索引是对空间数 据类型字段建立索引MYSQL空间数据类型有4种,分别是GEOMETRY、POINT

    3.1K30

    mysql前缀索引 默认长度_如何确定前缀索引长度?

    uniq_code` (`nick_name`,`account`,`city`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’Test’; 复制代码 原因 在MySQL5.6...在MySQL5.7里默认 innodb_large_prefix=1 解除了767bytes长度限制,但是单列索引长度最大还是不能超过3072bytes。...https://dev.mysql.com/doc/refman/8.0/en/create-index.html varchar(n)占用几个字节跟字符集有关系: 字符类型若为gbk,每个字符占用2个字节...=1 但是开启该参数后还需要开启表动态存储或压缩: 系统变量innodb_file_format为Barracuda ROW_FORMAT为DYNAMIC或COMPRESSED 复制代码 如何确定前缀索引长度...上面我们说到可以通过前缀索引来解决索引长度超出限制问题,但是我们改如何确定索引字段取多长前缀才合适呢?

    3.5K20

    MySQL索引本质,MySQL索引实现,MySQL索引数据结构

    (三)聚集索引和非聚集索引 二、MySQL索引实现(摘) (一)MyISAM索引实现: (二)InnoDB索引实现: 一、索引本质 索引是帮助MySQL高效获取数据排好序数据结构。...(三)聚集索引和非聚集索引 回答这个问题之前先来看一下Mysql底层数据文件存储方式,这里拿MyISAM和InnoDB两种引擎来做比较。 1、MyISAM引擎 ?...二、MySQL索引实现(摘) 在MySQL中,索引是在存储引擎层实现,不同存储引擎对索引实现方式是不同,下面我们探讨一下MyISAM和InnoDB两个存储引擎索引实现方式。...因为InnoDB数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录列作为主键,如果不存在这种列,...则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。

    1.8K30
    领券