数据库中建立索引的主要作用是什么

嘿,你的问题很不同。
数据库索引是为了让查询数据更快。
让我给你一些我从挖掘陷阱或阅读文档中收集到的要点:
上周我帮助一位电子商务朋友修复了他在上海的系统。
他的表有 5 00 万行数据,没有索引的查询同样慢。
后来我对几个关键字段添加了复合索引,查询速度快了1 0倍以上。
这是一种非常可以理解的感觉。
1 、加快恢复:这是关键。
索引就像一本书的目录。
无需滚动页面即可直接找到该页面。
例如,如果您检查用户的顺序,数据库将直接在索引表中找到该位信息,但在非索引表中,您必须从第一行扫描到最后一行。
当年我在2 02 3 年的一个项目中尝试过,同样的查询对于索引为0.5 的表需要0.5 秒,对于没有索引的表需要3 秒。
差距不小。
2 . 便于排序和分组:我在这方面遇到了陷阱。
之前有一个项目使用GROUP BY进行分组,结果极其缓慢。
后来我发现这是因为所使用的字段没有索引。
想象一下,数据很乱,你必须重新组织它才能将其分组。
添加索引后,数据库直接使用索引中排序的信息进行分组,速度非常快。
我记得当年2 02 2 年金融体系优化的时候就发现了。
添加该索引后,组查询从5 分钟减少到1 0秒。
3 .验证数据多样性:这是一个副作用,但非常重要。
比如用户的手机号码必须是唯一的,只要添加唯一索引,数据库就会自动帮你验证。
去年我帮助一个团队开发了一个用户注册系统,没有添加唯一索引。
结果有人注册了两个相同的手机号码,后来我就查不出来了。
添加索引后,会自动报重复插入错误,省去了很多麻烦。
4 .支持共享查询:这是组合索引的一个奇妙的用途。
如果确认几个条件,同时合并索引可以装。
例如,我以前做过会员系统。
我需要同时按城市和级别对用户进行身份验证。
我直接扫描表,没有添加索引。
添加(city,rank)复合索引后,查询速度稍微快一些。
当年2 02 1 年北京的项目有1 00万条测试数据,差异特别明显。
5 、物理存储独立性:索引是一个独立的文件,不影响表数据的顺序。
之前我不太明白这一点,认为添加索引会改变表结构。
我添加索引后发现表还是一样,索引不一样了。
这样做的好处是,即使删除指针,也不会影响表数据,更加灵活。

不过话说回来,索引也不是万能的。
之前我有一个项目,盲目的添加了索引,但是写入过程变得非常慢,因为索引每次的增删改查都要等待。
最后,应该删除重复的索引。
因此,该指标应相应提高。
您的客户是否进行更多检查或写作?如果需要更多,请添加更多索引。
如果你写了很多,你应该考虑添加。
无论如何,这取决于你。

数据库怎么建立索引

说实话,说到数据库索引,我当时也遇到了一个问题。
我将向您提供一些我在过去 1 0 年中总结的有用信息,以确保其真实性。

1 .创建索引的基本流程
最重要的是CREATE INDEX这行代码。
例如,当我在我的电商平台上为user表的name字段添加索引时,我只是使用了CREATE INDEX idx_name ON users(name)。
但请注意ON后面必须跟字段名,不要漏掉。
如果要创建降序索引,例如按用户级别从最高到最低搜索,请键入 CREATE INDEX idx_grade ON users(grade DESC)。
当涉及到唯一索引时,我也遇到了风险。
我记得我曾经必须确保用户邮箱不重复,并直接为用户(电子邮件)使用 CREATE UNIQUE INDEX idx_email ON 来执行此操作。
后来发现在添加数据的时候,重复的邮箱立刻就报错了。
这比什么都好。

2 索引管理操作
最实用的SQL语句是显示用户的索引。
我已经养成了每次更改索引时运行此命令进行确认的习惯,以免创建一堆无用的索引。
删除索引时有一些细节需要注意,比如对用户写DROP INDEX idx_name ON。
执行完后最好到数据库管理工具中看看索引列表是否已经消失了。
我之前也删除过索引,因为表名拼错了,还傻乎乎的以为没有问题。

3 索引的原理和作用
这个东西就像图书馆索引一样。
我当时正在照顾一名实习生,他问我为什么索引编制得这么快。
我用图书馆来比喻。
搜索表就像搜索书架上的每一本书,而索引就像目录。
您可以搜索作者姓名,直接进入相应章节。
索引页存储字段值和行索引,类似于MySQL中的ROWID。
记住一个关键点,索引并不是表数据的镜像,而是拥有独立的存储结构,所以对大表添加索引的优化效果特别明显。

4 索引的优点和缺点
在优点中,我最欣赏的是检索过程的加快。
记得优化某支付系统时,对订单表的订单历史建立了索引,查询时间直接从5 秒降低到0.3 秒。
唯一索引的另一个好处是它们在进行数据隐藏时特别有用。
但是,你也得承认缺点。
在例如,在一个项目中,您向特定字段添加了索引。
导致数据量大时写入性能下降3 0%。
这是一个示例课程。
为表连接添加索引也是一门学问。
我有一个客户,在向外键添加索引后,相关查询的运行速度突然提高了 5 0%。

5 适用场景及注意事项
不言而喻,查询字段都是高频的,比如用户表中的username、订单表中的order_date。
我发现索引外键字段特别有用。
在一个物流系统中,对 consignee_id 进行索引后,查询相关配送订单的速度提高了 4 0%。
但最重要的是避免过度索引。
我有一个同事,只是给每个字段加一个索引,最终系统就崩溃了,因为数据量小时维护成本翻倍。
必须强调定期维护。
我见过的最糟糕的系统是索引堆积起来占用了 8 0% 的存储空间。
结果,查询速度变慢。
建议您设置一个 cron 作业来定期运行这些命令: SHOW INDEX FROM table_name WHERE Key_name != 'PRIMARY';然后配合数据库自带的OPTIMIZE TABLE。

我可以添加更多内容,例如索引失败场景。
例如,我之前发现向函数管理的字段添加索引是无效的。
例如,CREATE INDEX idx_lower_name ON users(LOWER(name)) 将不起作用。
必须写成 CREATE INDEX idx_name ON users(name) 才有效。
在类似的查询中,如果模式以通配符开头,它也将无效。
但说实话,在数据量不大的情况下,这些情况很少见,所以不要把精力花在这上面,先做好基础再说。

索引的作用是

1 、更好的索引查询效率:没有索引时,查询需要扫描全表,如果有索引,可以直接定位。
如果表没有用户索引,则必须浏览具体用户,如果有索引,则可以快速定位。
2 、维护唯一性:唯一索引可以防止数据重复,比如对用户系统中的用户建立唯一索引,避免重复用户。
3 . 加速表链接:加速索引链接操作。
如果两个表中的字段有链接索引,则可以快速找到匹配的记录。
4 .减少排序和分组的时间:索引直接使用顺序,不需要额外的排序,例如SORT BY和GROUP BY操作。
5 . 降低IO和排序成本:列表数据的读取和排序,例如包括高质量的查询,以及索引工作显着改善。

实用建议:合理设计索引,过度索引。