在 MySQL 中建索引时需要注意哪些事项?
在 MySQL 中建索引时需要注意哪些事项
索引在 MySQL 中是提升查询性能的关键,但不当的索引设计可能会导致性能下降或资源浪费。因此,在建索引时需要综合考虑性能、存储成本和业务需求。
1. 确定需要建索引的列
主键和唯一性约束字段:
- 主键列会自动创建聚簇索引。
- 对需要唯一性约束的字段添加唯一索引(
UNIQUE),如用户名、邮箱。
频繁作为查询条件的列:
- 对
WHERE、GROUP BY、ORDER BY、HAVING、DISTINCT等子句中频繁出现的字段建索引。
- 对
数据分布较离散的字段:
- 选择性高(离散值多)的列更适合作为索引,能有效减少扫描数据量。
- 例如:
身份证号适合建索引,性别(男/女)不适合。
2. 控制索引数量
避免过多索引:
- 每个索引都会增加存储空间,并在
INSERT、UPDATE、DELETE操作时产生额外的维护开销。 - 索引过多可能会导致写性能下降。
- 每个索引都会增加存储空间,并在
删除冗余索引:
- 避免重复索引,如同时创建
(a)和(a, b)索引时,单列索引可能冗余。
- 避免重复索引,如同时创建
3. 选择合适的索引类型
单列索引和联合索引:
- 单列索引适用于简单查询。
- 联合索引(多列)适用于多条件查询,但需注意最左前缀匹配原则。
覆盖索引:
- 尽量设计覆盖查询字段的索引,避免回表操作,提高查询效率。
全文索引:
- 对于文本内容(如文章、评论)中的关键词搜索,使用全文索引(
FULLTEXT)。
- 对于文本内容(如文章、评论)中的关键词搜索,使用全文索引(
空间索引:
- 对于地理信息查询,使用
SPATIAL索引。
- 对于地理信息查询,使用
4. 考虑索引的存储成本
字段类型选择:
- 字段尽量选择较小的数据类型(如
INT比BIGINT更节省空间)。 - 对长文本字段(如
VARCHAR、TEXT)建索引时需设置合适的前缀长度。
- 字段尽量选择较小的数据类型(如
合适的前缀索引:
- 对大字段(如
VARCHAR(255)),可以使用前缀索引:
CREATE INDEX idx_email ON users(email(10)); - 前缀长度需根据数据分布选择,避免索引选择性过低。
- 对大字段(如
5. 索引设计与查询匹配
遵循最左前缀原则:
- 联合索引从最左列开始连续匹配,才能有效利用。
避免索引失效的操作:
- 不要对索引列使用函数或表达式:
错误示例:WHERE YEAR(create_time) = 2023 - 避免在索引列上进行隐式类型转换:
错误示例:WHERE age = '25'(age为INT类型)
- 不要对索引列使用函数或表达式:
考虑排序需求:
ORDER BY和GROUP BY的字段顺序应与索引设计一致,避免文件排序。
6. 根据业务需求动态调整
分析慢查询日志:
- 定期分析
slow query log,找到需要优化的查询,根据实际查询需求设计索引。
- 定期分析
使用
EXPLAIN分析查询:- 通过
EXPLAIN查看查询是否正确使用了索引,并根据实际执行计划调整索引。
- 通过
7. 其他注意事项
避免盲目全表索引:
- 并不是每一列都需要索引,对频繁更新且很少用于查询的列不建议建索引。
分区和索引的兼容性:
- 在分区表中,必须包含分区键的字段才能使用索引。
锁问题:
- 在大表上创建或删除索引时,可能导致锁表操作。建议在业务低峰期执行,或使用
ONLINE创建索引功能。
- 在大表上创建或删除索引时,可能导致锁表操作。建议在业务低峰期执行,或使用
8. 总结
建索引是性能优化的核心,但需要综合考虑查询效率、存储成本和写性能影响。通过结合业务需求、数据分布和查询模式,合理设计索引策略,才能最大化发挥索引的作用。
在 MySQL 中建索引时需要注意哪些事项?的更多相关文章
- Mysql UPDATE 操作时含 Limit 注意事项
在update时,可以使用limit来设置,更新的条数,但下面这句sql语句是错误的. LIMIT ,; //错误提示:ERROR 1064 (42000): You have an error in ...
- 使用DbVisualizer 10.0.20 查询ES中的索引时需要注意的事项
查询前5条数据 光标停在某一个查询结果框中,左下角会显示该字段的类型 查询类型是text的字段使用单引号,使用双引号查询会报错
- 你们一般都是怎么进行SQL调优的?MySQL在执行时是如何选择索引的?
前言 过年回来的第二周了,终于有时间继续总结知识了.这次来看一下SQL调优的知识,这类问题基本上面试的时候都会被问到,无论你的岗位是后端,运维,测试等等. 像本文标题中的两个问题,就是我在实际面试过程 ...
- mysql数据库索引调优
一.mysql索引 1.磁盘文件结构 innodb引擎:frm格式文件存储表结构,ibd格式文件存储索引和数据. MyISAM引擎:frm格式文件存储表结构,MYI格式文件存储索引,MYD格式文件存储 ...
- 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...
- MySQL中索引和优化的用法总结
1.什么是数据库中的索引?索引有什么作用? 引入索引的目的是为了加快查询速度.如果数据量很大,大的查询要从硬盘加载数据到内存当中. 2.InnoDB中的索引原理是怎么样的? InnoDB是Mysql的 ...
- MySQL 联合索引详解
MySQL 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c ...
- Mysql复合索引
当Mysql使用索引字段作为条件时,如果该索引是复合索引,必须使用该索引中的第一个字段作为条件才能保证系统使用该索引,否则该索引不会被使用,并且应尽可能地让索引顺序和字段顺序一致
- 如何正确建立MYSQL数据库索引
索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...
- mysql高性能索引策略
转载说明:http://www.nyankosama.com/2014/12/19/high-performance-index/ 1. 引言 随着互联网时代地到来,各种各样的基于互联网的应用和服务进 ...
随机推荐
- uni-app中picker-view(常见的坑)出现选择值与输出的值不一致
今天遇见一个问题,在使用picker-view的时候: 出现我选择的值和输出的值不一致: 经过与官方的demo做对比发现: 官方是实时的将值从组件中向上抛出去: 值是从change事件传递出去的 而我 ...
- Linux glibc自带哈希表的用例及性能测试
今天来看看Linux和一些常见的BSD系统上自带的hashmap. 是的,系统自带的.因为POSIX标准定义了一些常见的数据结构(比如哈希表.二叉搜索树.队列)和算法(比如二分查找和快速排序),这些接 ...
- ClickHouse 常用语句
一.常用操作 1.建数据库 连接数据库:clickhouse-client -h 10.0.0.0 --port 9000 -u test_user --password test_password ...
- Codeforces 1749E Cactus Wall 题解 [ 紫 ] [ 01 BFS ] [ 图论建模 ] [ 构造 ] [ adhoc ]
一道很好的思维题,被教练碾压了. 观察 首先从题目给的样例入手: 5 5 ..... ..... ..... ..... ..... 这种情况最终的答案是: YES ....# ...#. ..#.. ...
- C++代码改造为UTF-8编码问题的总结
1. 引言 无论是哪个平台哪种编程语言,字符串乱码真是一个让人无语的问题:你说这个问题比较小吧,但是关键时刻来一下真是受不了.解决方式也有很多种,但是与其将编码转换来转换去,不如统一使用同一种编码方式 ...
- FreeSql学习笔记——4.联表
前言 上一章节是查询,记录了简单的查询,比较看好的是分块.Dto映射和分页,除了简单的单表查询,更多的时候要用到联表查询,毕竟设计数据库是按照范式设计,FreeSql的联表操作有导航属性.Join ...
- mysqldump从mysql迁移数据到OceanBase
使用mysqldump导出数据 /usr/bin/mysqldump --single-transaction -B employees -S /data/mysql/mysql.sock -uroo ...
- 推荐一款最新开源,基于AI人工智能UI自动化测试工具!支持自然语言编写脚本!
随着互联网技术的飞速发展,Web应用越来越普及,前端页面也越来越复杂.为了确保产品质量,UI自动化测试成为了开发过程中不可或缺的一环.然而,传统的UI自动化测试工具往往存在学习成本高.维护困难等问题. ...
- 使用Windows任务计划程序实现每天更换一张Processing创意桌面壁纸
Windows任务计划程序(Windows Task Scheduler)是Windows操作系统中的一项系统工具,它允许用户安排自动执行的任务.通过任务计划程序,用户可以设定特定的时间或条件来运行各 ...
- 【2022_12_2】Fibersim安装记录
Fibersim 安装记录 1. 为什么要写这个文章? 因为我前前后后装了四天才装成功.在我的电脑上,fibersim14 16 17 15 挂到UG10 12 CatiaV5-6R2019 2018 ...