mysql数据库索引优化【建议收藏】

在我们程序员玩数据库的时候,经常会写sql,但是决定一个sql的好坏往往是效率,于是我们需要不断的去优化我们的sql,写一句让人称赞的sql是非常不容易的,也是需要大家有非常深厚的功底,所以优化路漫漫,我们慢慢来;在这里博主就给大家分享一下优化sql中常见的添加索引的优化方式,希望这篇博客对大家有帮助;

目录

一、为什么要添加索引?

二、添加索引的好处是什么?

1、提高查询效率:

2、降低系统开销:

3、提高数据完整性:

三、索引的概念是什么?

四、索引优化的方式有哪些?

1、确定需要创建的索引的列:

2、确定索引类型:

3、避免在索引列上使用函数或者表达式:

4、避免使用 OR 连接条件:

5、避免在表达式左侧使用运算符:


一、为什么要添加索引?

如果我们经常需要根据某个列进行查询,我们就可以在该列来创建索引从而实现查询速度

比如中华字典,我们经常根据首字母、偏旁部首、拼音音节进行查询,就可以对这些条件创建索引,从而让我们可以更快的找到某一个字;比如我们的书籍,文档,要是有一个目录他也会帮我们更快的找到我们想要的内容;所以“目录也就是传说中的索引”;惊不惊喜,意不意外,我们懂了索引的重要性,所以我们可以具体的学习一下在数据库如何去添加索引了。

二、添加索引的好处是什么?

1、提高查询效率:

        通过使用索引,数据库引擎可以快速定位到符合查询条件的记录,从而提高查询效率。

2、降低系统开销:

        使用索引可以减少数据库引擎的搜索范围,从而降低系统开销。

3、提高数据完整性:

        使用索引可以保证表中的数据唯一性和完整性。

三、索引的概念是什么?

        在数据中,索引是一种特殊的数据结构,它可以提高数据检索的速度在数据库中,索引通常是与表一起创建的,可以理解成是某一种数据结构,通过在索引中建立适当的数据结构,可以加速在数据库表中查找、排序、过滤数据的操作。

        假设有一个包含一百万条数据的用户表,其中包含了用户ID、姓名、年龄、邮箱等字段。如果要查询年龄小于25岁的用户,如果不使用索引,数据库查询某一个数据就需要遍历整个表,可想而知,这个过程将会非常耗时。

        如果我们在年龄列上创建了索引,数据库可以使用该索引直接定位到所有年龄小于25岁的数据行,而不是扫描整个表。这样可以大大提高查询性能。

        但是索引也不是万能的噢,如果使用不合理或不当使用的话,索引就会导致查询性能下降,从而影响数据库的整体性能。例如:如果在某个列上创建了太多的索引,会导致更新表时性能下降;总而言之,添加索引是好事,多了也会出事,“刚刚好”才是最好的状态;

        其实在这里我应该给大家分享一下索引的类型,但是太多了会影响各位看官的心情,我就单独提出来了,想了解的可以看另外一篇博客:mysql索引类型有哪些?_沐阳gg的博客-CSDN博客

四、索引优化的方式有哪些?

1、确定需要创建的索引的列:

可以通过查询SQL语句的执行计划,找出哪些SQL语句的查询效率比较低,然后确定需要创建索引的列。

具体如何查询慢sql,可以参考博主的另外一篇博客:mysql里面如何查询效率低的sql语句?_沐阳gg的博客-CSDN博客

例如:以下SQL语句查询效率比较低

SELECT * FROM table_name WHERE col1 = 'value1' AND col2 = 'value2';

在这个例子中,可以为‘col1’和'col2'分别创建索引:

CREATE INDEX idx_col1 ON table_name (col1);
CREATE INDEX idx_col2 ON table_name (col2);

2、确定索引类型:

不同的索引类型在不同的场景下具有不同的优势,需要根据具体的业务需求和场景来选择合适的索引类型。

例如:在以下 SQL 语句中,如果需要精确匹配 col1 的值,则可以使用 B+ 树索引:

SELECT * FROM table_name WHERE col1 = 'value1';

在这个例子中,可以为 col1 创建 B+ 树索引:

CREATE INDEX idx_col1 ON table_name (col1);

3、避免在索引列上使用函数或者表达式:

在索引列上使用函数或者表达式会导致索引失效,从而降低查询性能。

例如:在以下 SQL 语句中,如果需要在 col1 上使用函数,则可以将函数移动到 WHERE 子句之外:

SELECT * FROM table_name WHERE UPPER(col1) = 'VALUE1';

在这个例子中,可以将函数移动到 WHERE 子句之外,然后在 WHERE 子句中使用:

DECLARE @value1 VARCHAR(50) = 'value1';
SELECT * FROM table_name WHERE UPPER(col1) = UPPER(@value1);

4、避免使用 OR 连接条件:

在查询语句中使用 OR 连接条件会导致索引失效,从而降低查询性能。

例如,在以下 SQL 语句中,可以将 OR 连接条件拆分成两个查询语句:

SELECT * FROM table_name WHERE col1 = 'value1' OR col2 = 'value2';

可以将 OR 连接条件拆分成两个查询语句:

SELECT * FROM table_name WHERE col1 = 'value1';
SELECT * FROM table_name WHERE col2 = 'value2';

5、避免在表达式左侧使用运算符:

在查询语句中,将运算符放在表达式的左侧会导致索引失效,从而降低查询性能。

例如,在以下 SQL 语句中,可以将运算符放在表达式的右侧:

SELECT * FROM table_name WHERE col1 + 1 = 10;

可以将运算符放在表达式的右侧:

SELECT * FROM table_name WHERE col1 = 9;

大家有更好的意见也可以在评论区分享分享噢~~

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
回答: MySQL数据库索引优化是为了提高查询效率而进行的一系列操作。在优化过程中,可以采取添加索引的方式来提升执行效率。索引可以大大提高MySQL的检索速度。常见的索引优化方式包括以下几个方面: 1. 确定合适的索引类型:MySQL中有多种索引类型,如B树索引、哈希索引等。根据具体的查询需求和数据特点,选择合适的索引类型。 2. 添加合适的索引字段:根据查询的频率和重要性,选择合适的字段作为索引字段。通常选择经常用于查询条件的字段或者经常用于排序和分组的字段。 3. 使用前缀索引:前缀索引可以减小索引文件的大小,提高索引的速度。但是需要注意的是,前缀索引不能在ORDER BY或GROUP BY中使用,也不能用作覆盖索引。 4. 索引合并:当一个查询涉及多个字段时,可以考虑使用索引合并来提高查询效率。索引合并是指将多个单列索引合并为一个多列索引。 5. 避免过多的索引:过多的索引会增加数据的存储空间和维护成本,同时也会降低插入、更新和删除操作的性能。因此,需要根据实际需求,避免过多的索引。 6. 定期维护索引:定期对索引进行优化和维护,包括重新构建索引、删除不必要的索引等操作,以保证索引的有效性和性能。 总之,MySQL数据库索引优化是一个复杂而重要的工作,需要根据具体的业务需求和数据特点进行合理的设计和调整。通过合适的索引优化方式,可以提高查询效率,提升系统性能。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [mysql数据库索引优化建议收藏】](https://blog.csdn.net/qq_52545155/article/details/129755178)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [MySQL索引优化总结](https://blog.csdn.net/CSDN2497242041/article/details/120558219)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值