首页 > 数据库 >如何通过对大型表建立索引来提高数据库的性能

如何通过对大型表建立索引来提高数据库的性能

时间:2023-08-23 14:32:22浏览次数:37  
标签:name country 数据库 查询 索引 创建 性能

什么是数据库索引?

数据库索引是一种可以更快地从数据库中搜索和检索数据的技术。这就像创建一个在一本大书中查找信息的快速指南。它有助于加快搜索速度并使查找内容变得更容易。

索引可加快 SELECT 查询和 WHERE 子句的速度。另一方面会减慢 INSERT 和 UPDATE 查询的速度。

如何通过对大型表建立索引来提高数据库的性能_搜索

图:数据库索引数据结构

为什么要建立索引?

想象一下,您有一个书籍数据库,并且您想要查找标题中包含“编程”一词的所有书籍。如果没有索引,数据库将必须扫描表中的每一行才能找到与搜索条件匹配的书籍。这可能需要很长时间,特别是如果表中有很多书的话。

但是,如果在标题列上创建索引,数据库可以快速找到与搜索条件匹配的行。索引是一个单独的数据结构,它按排序顺序存储标题列的值。数据库可以利用索引快速找到标题中包含“编程”一词的行。

为包含 5000 万行的表建立索引

pg-million对于此示例,我们将在 PostgreSQL 中创建一个数据库,其中包含customers包含以下列的表:first_namelast_namemobile_nocountry

插入5000万行随机数据

CREATE TABLE customers(first_name VARCHAR(50), last_name VARCHAR(50), mobile_no INTEGER, country VARCHAR(50))

INSERT INTO customers (first_name, last_name, mobile_no, country)
SELECT substr(md5(random()::text), 1, 10),
       substr(md5(random()::text), 1, 10),
       (random() * 70 + 10)::integer,
       (CASE WHEN random() < 0.5 THEN 'India' ELSE 'United Kingdom' END)
FROM generate_series(1, 50000000);


country在列 上创建索引

我们在列上创建索引country以获得组织良好的列表,使我们可以快速找到来自特定国家/地区的所有客户,而无需搜索整个列表。

CREATE INDEX idx_partial_country ON customers (country) WHERE country IN ('India', 'United Kingdom')


创建索引的时间:2m 2s

对于此示例,我们使用部分索引。部分索引是根据过滤行中特定值的条件创建的。这允许数据库仅对相关行进行索引和优化,从而减少索引大小并提高这些特定值的查询性能。

注意:不同数据库创建索引的语法和索引类型有所不同。您应该根据您的数据库和用例使用适当的语法和索引类型。

测量索引前后的查询执行时间

考虑以下查询

SELECT * FROM customers WHERE country='United Kingdom';


没有索引的查询执行时间:41836.270 ms

带索引的查询执行时间:24254.644 ms

Improvement in query execution time ~42.03%

(为了更好地理解,您可以在这里找到所有代码

指数表现如何?

深入了解指数的有效性非常重要。一些有用的指标包括:

  • 索引使用情况统计信息:监控索引的使用情况,以了解哪些索引对查询性能有积极贡献。(例如:跟踪索引的大小,因为较大的索引可能会影响磁盘空间和 I/O 性能)
  • 查询性能指标:监视涉及索引列的查询的查询执行时间和响应时间。(例如:查询执行时间突然增加可能表明存在索引相关问题。)
  • 索引维护指标:定期评估索引的健康状况及其对数据库操作的影响。(例如:跟踪索引膨胀,当索引由于过度插入、更新或删除而变得低效时就会发生这种情况。)

何时使用索引?

  • 频繁搜索查询:当您频繁搜索大型数据集中的特定数据时,请使用索引。它有助于快速找到所需的信息。
  • 性能改进:索引可以通过避免扫描整个数据集来提高数据检索操作的速度,特别是对于复杂查询。
  • 大数据量:在处理大量数据时使用索引,因为即使数据集增长,它也有助于保持高效的查询性能。

什么时候不使用索引?

  • 频繁的写入操作:如果数据库频繁执行插入、更新或删除操作,请避免建立过多的索引,因为索引会减慢这些写入操作的速度并消耗额外的存储空间。索引不应该用在经常操作的列上。
  • 小型数据集:对于相对较小的数据集,索引可能无法提供显着的性能提升,并且可能会带来不必要的开销。在这种情况下,收益可能不会超过成本。

结论

如果您正在寻找提高数据库性能的方法,那么数据库索引是一个不错的起点。通过在查询中经常使用的列上创建索引,可以显着提高数据库的性能并使查询速度更快。然而,在做出决定之前权衡索引的优点和缺点很重要。

标签:name,country,数据库,查询,索引,创建,性能
From: https://blog.51cto.com/u_15739596/7202889

相关文章

  • 精彩回顾|【ACDU 中国行·杭州站】数据库主题交流活动成功举办!
    8月19日下午,【ACDU中国行·杭州站】在杭州西溪万怡酒店圆满落下帷幕。本次活动由中国数据库联盟(ACDU)联合墨天轮社区主办,蚂蚁集团OceanBase 及亚信科技AntDB 赞助支持。六位数据库行业领军人物围绕「数据库技术揭秘及应用实践」这一主题,聚焦数据库技术的核心要素、数据库降本......
  • GIS开发与应用(PostgreSQL空间数据库各种查询语句范例以及SQL语句查询空间关系)_postgre
    实验二PG空间数据库应用实验目的:实验准备实验内容及要求实验过程及步骤:1、创建空间数据库nyc,在nyc空间数据库中创建geometries表,对表中插入Point、Linestring、Polygon、PolygonWithHole、collection等几何要素。2、查看geometries表中的几何图形的元数据。使用`ST_G......
  • 一个查询数据库并解析其中的json格式的数据,并处理后保存到另外的表的python程序
    1importjson2importpymysql3importdatetime4fromdecimalimportDecimal5fromdecoupleimportconfig678#获取每日汇率的方法9defget_currency_rate(code):10currency_db_host=config("CURRENCY_DB_HOST")11curre......
  • 使用秘籍|如何实现图数据库 NebulaGraph 的高效建模、快速导入、性能优化
    本文整理自NebulaGraphPD方扬在「NebulaGraphxKubeBlocks」meetup上的演讲,主要包括以下内容:NebulaGraph3.x发展历程NebulaGraph最佳实践建模篇导入篇查询篇NebulaGraph3.x的发展历程NebulaGraph自2019年5月开源发布第一个alpha版本以来,陆陆续续发......
  • 千万级数据深分页查询SQL性能优化实践 | 京东云技术团队
    一、系统介绍和问题描述如何在Mysql中实现上亿数据的遍历查询?先来介绍一下系统主角:关注系统,主要是维护京东用户和业务对象之前的关注关系;并对外提供各种关系查询,比如查询用户的关注商品或店铺列表,查询用户是否关注了某个商品或店铺等。但是最近接到了一个新需求,要求提供查询关注对......
  • 千万级数据深分页查询SQL性能优化实践
    一、系统介绍和问题描述如何在Mysql中实现上亿数据的遍历查询?先来介绍一下系统主角:关注系统,主要是维护京东用户和业务对象之前的关注关系;并对外提供各种关系查询,比如查询用户的关注商品或店铺列表,查询用户是否关注了某个商品或店铺等。但是最近接到了一个新需求,要求提供查询关注......
  • 导出数据库表格为特定格式
    导出数据库表格为excel格式:SELECTCOLUMN_NAME列名,DATA_TYPE字段类型,ifnull(ifnull(CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION),DATETIME_PRECISION)长度,ifnull(NUMERIC......
  • Windows平台安装Oracle数据库软件
    1.安装程序下载https://www.oracle.com/database/technologies/oracle19c-windows-downloads.html下载第一个OracleDatabase19c(19.3)forMicrosoftWindowsx64(64bit),版本为19c 2.安装   (1)解压下载下来的压缩包,进入目录后执行setup.exe程序,启动Oracle数据库安装向导......
  • Learn Git in 30 days——第 05 天:了解仓库、工作目录、物件与索引之间的关系
    写的非常好的一个Git系列文章,强烈推荐原文链接:https://github.com/doggy8088/Learn-Git-in-30-days/tree/master/zh-cn在使用Git版本控制的过程中,有些很基本的观念必须被建立,这样才能更有效率也更有意义的学下去。有清楚且正确的观念支持,不但有助于你学习Git指令操作,更重......
  • Python基础入门学习笔记 025 字典:当索引不好用时
    映射 创建和访问字典>>>dict4=dict(小甲鱼='让编程改变世界',李宁='一切皆有可能')>>>dict4{'小甲鱼':'让编程改变世界','李宁':'一切皆有可能'}>>>dict4['爱迪生']='天才是99%的汗水加1%的灵感'>>&g......