首页
学习
活动
专区
圈层
工具
发布

mysql创建索引

1、索引需要占用磁盘空间,因此在创建索引时要考虑到磁盘空间是否足够 2、创建索引时需要对表加锁,因此实际操作中需要在业务空闲期间进行 SELECT * FROM table_name WHERE...在已存在的表中,可以使用ALTER TABLE语句或者CREATE INDEX语句创建索引 在已存在的表中,索引的创建语句结构 1.普通索引(Normal): ALTER TABLE 表名 ADD INDEX...大家可以尝试自己添加一下 删除索引语句结构 删除索引的语句方式主要有以下两种 删除主键索引 alter table 表名 drop primary; 其他索引的删除 ALTER TABLE 表名 DROP...查看表中的索引 show keys from 表名; show index from 表名; desc 表名; 查看查询语句使用索引的情况 //explain 加查询语句 explain SELECT...,因此会占用存储空间,一般来说,索引表占用的空间的数据表的1.5倍;索引表的维护和创建需要时间成本,这个成本随着数据量增大而增大;构建索引会降低数据表的修改操作(删除,添加,修改)的效率,因为在修改数据表的同时还需要修改索引表

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

    MySQL InnoDB创建索引

    1.3 InnoDB系统列 InnoDB在创建表的时候,除了用户自定义的列之外,还会额外地增加几个隐藏的列,这些列在MySQL Server看来是不可见的,我们称之为系统列。...2.代码分析 2.1 建表时创建索引 假设我们在建表时不创建主键,但是创建一个二级索引,SQL语句形如: CREATE TABLE t (a int, b int, index idx(b)) ENGINE...step2: 还是基于上述的建表语句,当聚簇索引创建成功后,紧接着需要创建二级索引,也即上表中'idx'....2.2 重启后创建索引 MySQL重启后,内部索引对象丢失,需要在启动后重新创建相关的索引。MySQL重启后首先会将数据字典内的信息进行读取和初始化,然后根据数据字典的信息进行索引的创建。...还是以上文的表t为例,假设现在MySQL重启,如何在t上构建索引? step1: 创建聚簇索引 无论如何,聚簇索引都会第一个创建。

    7K30

    MySQL 创建索引和索引效率验证

    给数据表创建索引 使用 create index 索引名 on 表名(字段名称(长度)); 来创建索引。 如果指定的字段类型是字符串,需要指定长度,建议长度与数据表中定义字段时的长度一致。...创建索引后,查看索引,可以看到刚创建的索引信息。 5. 删除索引 使用 drop index 索引名 on 表名; 来删除索引。...开启 MySQL 运行时间监测 使用 set profiling=1; 开启 MySQL 运行时间检测,通过运行时间来对比有无索引的效率。...创建索引后查询 上面已经将刚才创建的索引删掉了,现在重新创建索引,然后执行相同的查询语句。 ? 从查询结果下面的时间可以看到是0.00秒,所以说这个时间的精度不够,需要使用更精确的监测时间来查看。...通过 show profiles; 查看,创建索引之前的查询时间是 0.03757600 秒,创建索引之后的查询时间是 0.00038250 秒,时间相差了 将近 100 倍,这就是索引带来的效率提升。

    3.9K30

    MySQL索引与SQL语句优化

    概念 1.普通索引:最基本的索引,它没有任何限制 2.唯一索引:索引列的值必须唯一,且不能为空,如果是组合索引,则列值的组合必须唯一。...同理,如果建立了(a,b,c)索引就不必再建立a,(a,b)索引 7、存在非等号和等号混合判断条件时,在建索引时,要把等号条件的列前置 8、范围列可以用到索引,但是范围列后面的列无法用到索引。   ...13、建立索引的列不能为null,使用not null约束及默认值 14、利用延迟关联或者子查询优化超多分页场景, MySQL并不是跳过offset行,而是取offset+N行,然后放弃前offset...18、Select语句务必指明字段名称 19、如果排序字段没有用到索引,就尽量少排序 20、尽量用union all 代替 union。   ...select id,name from product limit 866613, 20 使用上述SQL语句做分页的时候,可能有人会发现,随着表数据量的增加,直接使用limit分页查询会越来越慢。

    2.2K10

    MySQL索引详解(优缺点,何时需要不需要创建索引,索引及sql语句的优化)

    MySQL索引详解(优缺点,何时需要/不需要创建索引,索引及sql语句的优化) 一、什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。...查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找 查询中统计或者分组的字段; 六、什么时候不需要创建索引 频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,...联合索引:在多个字段上建立索引,能够加速查询到速度 八、索引和sql语句的优化 1、前导模糊查询不能使用索引, 如name like ‘%静’ 2、Union、in、or可以命中索引,建议使用in 3、...13、建立索引的列不能为null,使用not null约束及默认值 14、利用延迟关联或者子查询优化超多分页场景, MySQL并不是跳过offset行,而是取offset+N行,然后放弃前offset行...18、Select语句务必指明字段名称 19、如果排序字段没有用到索引,就尽量少排序 20、尽量用union all 代替 union。

    4.9K10

    mysql创建索引的原则

    在mysql中使用索引的原则有以下几点: 1、 对于查询频率高的字段创建索引; 2、 对排序、分组、联合查询频率高的字段创建索引; 3、 索引的数目不宜太多 原因:a、每创建一个索引都会占用相应的物理控件...;    b、过多的索引会导致insert、update、delete语句的执行效率降低; 4、若在实际中,需要将多个列设置索引时,可以采用多列索引 如:某个表(假设表名为...index index_name (StudentNo, StudentName, Sex, BirthDate); #index_name为索引名 在上面的语句中只创建了一个索引...创建多列索引,需要遵循BTree类型, 即第一列使用时,才启用索引。...在上面的创建语句中,只有mysql语句在使用到StudentNo字段时,索引才会被启用。

    3.8K11

    【116期】MySQL索引优缺点、何时需要不需要创建索引、索引及sql语句的优化

    索引需要占用物理空间,数据量越大,占用空间越大 会降低表的增删改的效率,因为每次增删改索引,都需要进行动态维护 五、什么时候需要创建索引 主键自动建立唯一索引 频繁作为查询条件的字段应该创建索引 查询中排序的字段创建索引将大大提高排序的速度...(索引就是排序加快速查找 查询中统计或者分组的字段; 六、什么时候不需要创建索引 频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,保存索引文件 where条件里用不到的字段,不创建索引...联合索引:在多个字段上建立索引,能够加速查询到速度 八、索引和sql语句的优化 1、前导模糊查询不能使用索引,如name like ‘%静’ 2、Union、in、or可以命中索引,建议使用in 3、负条件查询不能使用索引...13、建立索引的列不能为null,使用not null约束及默认值 14、利用延迟关联或者子查询优化超多分页场景,MySQL并不是跳过offset行,而是取offset+N行,然后放弃前offset行,...18、Select语句务必指明字段名称 19、如果排序字段没有用到索引,就尽量少排序 20、尽量用union all 代替 union。

    3.5K30

    MySQL 如何创建索引及优化

    比如SQL语句写的烂,索引没有或失效,关联查询太多(有时候是设计缺陷或者不得以的需求)等等。...4.找DBA或者运维对MySQL进行服务器的参数调优。 三、什么是索引? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。...mysql 在查询时具体使用了哪些索引,由 key 字段决定。 6.key 此字段是 mysql 在当前查询时所真正使用到的索引。...*,o.* from user_info u LEFT JOIN  order_info o on u.id=o.user_id; 执行结果,type有ALL,并且没有索引: 开始优化,在关联列上创建索引...六、是否需要创建索引? 索引虽然能非常高效的提高查询速度,同时却会降低更新表的速度。实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的。

    4K20

    MySQL 如何创建索引?怎么优化?

    比如SQL语句写的烂,索引没有或失效,关联查询太多(有时候是设计缺陷或者不得以的需求)等等。...4.找DBA或者运维对MySQL进行服务器的参数调优。 三、什么是索引? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。...mysql 在查询时具体使用了哪些索引,由 key 字段决定。 6.key 此字段是 mysql 在当前查询时所真正使用到的索引。...开始优化,在关联列上创建索引,明显看到type列的ALL变成ref,并且用到了索引,rows也从扫描9行变成了1行: ? 这里面一般有个规律是:左链接索引加在右表上面,右链接索引加在左表上面。...六、是否需要创建索引? 索引虽然能非常高效的提高查询速度,同时却会降低更新表的速度。实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的。 ?

    5.5K120

    MySQL索引最佳实践:高效索引创建全攻略

    通过分析慢查询日志(slow query log)或使用MySQL内置的Performance Schema,可以识别出哪些SQL语句消耗最多资源。...例如,对于查询条件经常包含user_id和status的语句,创建一个复合索引(user_id, status),而不是单独索引每个字段,这可以确保索引在多种查询场景下生效。...第五步:持续监控与优化 索引创建后,需建立监控机制来跟踪性能变化。利用MySQL的监控工具如Performance Schema或sys schema,收集查询延迟、索引使用频率等指标。...忽略查询优化:索引不是万能药,有时需重写查询语句(如避免LIKE '%value%)或调整数据库配置。...多值索引与函数索引 MySQL 8.0版本以后增强了对JSON数据类型的支持,并引入了多值索引(Multi-Valued Indexes),允许为JSON数组中的元素创建索引,大大提升了半结构化数据的查询效率

    81410

    如何在MySQL中创建聚集索引?

    了解如何创建聚集索引以及它的特点,对提高查询效率和优化表结构至关重要。 这篇文章我们将详述MySQL中聚集索引的基础理论、规则以及相关操作方法。 什么是聚集索引?...MySQL如何选择聚集索引?...虽然MySQL不能直接在一个非主键列创建聚集索引,但通过修改主键定义,可以达到调整聚集索引的目的。例如,希望一个组合键成为聚集索引。...创建基于非主键列的聚集索引 在InnoDB中,无法直接定义基于非主键列的聚集索引。但通过调整表的主键定义,可以实现变相的效果。...小结 MySQL中聚集索引的创建和选择由表结构定义决定。在InnoDB存储引擎中,主键、唯一索引或隐式定义的索引都会作为表的聚集索引。通过优化主键设计,可以间接实现聚集索引的定制化。

    18310

    MySQL字符串索引创建方案

    字符串字段添加索引 MySQL是支持前缀索引的,也就是说,你可以定义字符串的一部分作为索引。默认地,如果你创建索引的语句不指定前端长度,那么索引就会包含整个字符串。...如使用一下语句选择前缀索引的长度: select count(distinct left(email,4))as L4, count(distinct left(email,5))as L5, count...(distinct left(email,6))as L6, count(distinct left(email,7))as L7 from SUser; 创建前缀索引前,需要预定可接受的损失比例,使用...字符串索引的四种方式 直接创建完整索引,这样可能比较占用空间(应用最广泛); 创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引; 倒序存储,再创建前缀索引,用于绕过字符串本身前缀的区分度不够的问题...; 创建 hash 字段索引,查询性能稳定,有额外的存储和计算消耗,跟第三种方式一样,都不支持范围扫描。

    80130

    MySQL中索引创建错误的场景

    同事反馈说某个MySQL数据库创建索引提示错误,模拟报错如下, CREATE INDEX t_reg_code_idx USING BTREE ON t(reg_code) BLOB/TEXT column...'reg_code' used in key specification without a key length 从这个提示,可以知道是给T表的reg_code字段创建一个BTREE索引,而这个reg_code...这个库是MySQL 8.0,从官方手册,可以找到这段对Index Prefixes的说明(如下所示),意思是如果对BLOB或者TEXT列创建索引,必须指定索引的前缀长度。...MySQL 5.7官方手册中,对索引前缀的限制有所不同,InnoDB表的索引前缀最多可以达到1000个字节(此处结合其它章节的说名和实验,我认为是错误的,应该是3072个字节),但前提是设置了innodb_large_prefix...可以通过实验,验证下MySQL 8.0对于前缀长度的限制,例如创建一张row format是COMPACT的InnoDB表,指定前缀长度10000,提示最大键的长度只能是767个字节, create

    1.8K40
    领券