`

sql的索引优化

阅读更多
引用
问题描述:
我们要访问的表是一个非常大的表,四千万条记录,id是主键,program_id上建了索引。
执行一条SQL:

select * from program_access_log where program_id between 1 and 4000
这条SQL非常慢。
我们原以为处理记录太多的原因,所以加了id限制,一次只读五十万条记录

select * from program_access_log where id between 1 and 500000 and program_id between 1 and 4000
但是这条SQL仍然很慢,速度比上面一条几乎没有提升。
Mysql处理50万条记录的表,条件字段还建了索引,这条语句应该是瞬间完成的。


问题分析:
这张表大约容量30G,数据库服务器内存16G,无法一次载入。就是这个造成了问题。
这条SQL有两个条件,ID一到五十万和Program_id一到四千,因为program_id范围小得多,mysql选择它做为主要索引。
先通过索引文件找出了所有program_id在1到4000范围里所有的id,这个过程非常快。
接下来要通过这些id找出表里的记录,由于这些id是离散的,所以mysql对这个表的访问不是顺序读取。
而这个表又非常大,无法一次装入内存,所以每访问一条记录mysql都要重新在磁盘上定位并把附近的记录都载入内存,大量的IO操作导致了速度的下降。

问题解决方案:
1. 以program_id为条件对表进行分区
2. 分表处理,每张表的大小不超过内存的大小
然而,服务器用的是mysql5.0,不支持分区,而且这个表是公共表,无法在不影响其它项目的条件下修改表的结构。
所以我们采取了第三种办法:

select * from program_access_log where id between 1 and 500000 and program_id between 1 and 15000000
现在program_id的范围远大于id的范围,id被当做主要索引进行查找,由于id是主键,所以查找的是连续50万条记录,速度和访问一个50万条记录的表基本一样

总结:
这是一个在千万笔记录表中由于使用了索引导致了数据查找变慢的问题,有一定的典型性和大家交流下!
分享到:
评论

相关推荐

    SQLAdvisor,输入SQL,输出SQL索引优化建议

    主要功能:输出SQL索引优化建议 二、SQLAdvisor详细说明 SQLAdvisor快速入门教程 SQLAdvisor架构和实践 SQLAdvisor release notes SQLAdvisor开发规范 FAQ SQLAdvisor是由美团点评公司技术工程部DBA团队(北京)...

    SQL 索引优化

    在数据库管理中,SQL索引优化是提升查询性能的关键技术之一。索引如同书籍的目录,可以帮助数据库系统快速定位和访问数据,减少全表扫描的时间,从而提高查询速度。本篇将深入探讨SQL索引的基本概念、类型、优化策略...

    基于SQL索引优化的降龙十八掌

    【标题】:“基于SQL索引优化的降龙十八掌” 【描述】:这是一份关于SQL索引优化的重要资料,适用于面试准备,提供了宝贵的数据库优化知识。 【标签】:“SQL”、“优化”、“数据优化资料”、“数据库面试题” ...

    SQLAdvisor美团SQL索引优化建议工具

     SQLAdvisor是美团开源的一款SQL索引优化建议工具, 是由美团点评公司技术工程部DBA团队(北京)开发维护的一个分析SQL给出索引优化建议的工具。它基于MySQL原生态词法解析,结合分析SQL中的where条件、聚合条件、...

    数据库面试题索引sql优化

    ### 数据库面试题索引SQL优化 在数据库领域,尤其是对于从事数据库管理、开发工作的专业人士而言,面试过程中经常会被问及关于SQL查询优化以及索引的相关问题。这些知识点不仅是技术能力的重要体现,也是提高数据库...

    SQL优化 SQL优化软件 SQL优化工具

    3. **建议与改写**:自动提供优化建议,包括修改SQL语句结构、创建或调整索引、优化连接方式等,有时甚至可以直接改写SQL语句以提高性能。 4. **历史记录与报告**:记录SQL语句的执行历史,生成性能报告,便于跟踪...

    SQL性能优化以及索引的优化

    在数据库管理领域,SQL性能优化和索引优化是至关重要的技术环节,它们直接影响到数据库的运行效率和用户体验。本文将深入探讨这两个主题,提供丰富的知识和实践经验。 首先,SQL性能优化涉及一系列策略和技巧,旨在...

    sql学习 某SQL建索引调优案例.doc

    SQL索引优化案例分析 在本文中,我们将对一个SQL索引优化案例进行深入分析,从而揭示索引优化的重要性和实践方法。 索引优化的必要性 在数据库中,索引是一种非常重要的优化手段。索引可以大大提高查询速度,减少...

    SQL Server 2000完结篇系列之七:SQL Server 2000索引优化详解

    本文将深入探讨SQL Server 2000中的索引优化,旨在帮助数据库管理员和开发人员理解如何有效地利用索引来提升系统性能。 一、索引的基本概念 索引是一种特殊的数据结构,它允许数据库快速定位到表中的特定行,类似于...

    sqlserver管理索引优化SQL语句

    sqlserver管理索引优化SQL语句

    sql优化加索引[参考].pdf

    这些优化策略不仅提供了理论指导,还通过实例展示了优化前后性能的显著差异,有助于开发者更好地理解和实践SQL索引优化。在实际工作中,应根据具体情况灵活运用这些原则,以达到最佳的数据库性能。

    SqlServer 数据库索引优化详解

    深入理解SqlServer索引机制及合理优化数据库

    SQL语句索引优化_sql索引降龙十八掌(Oracle)

    让我们一起领略"SQL索引降龙十八掌"的精髓。 一、了解索引 1. 索引类型: - B树索引:最常见的索引类型,适用于等值查询。 - bitmap索引:适用于多列组合查询和数据仓库场景。 - 全文索引:用于全文搜索。 - ...

    SqlServer性能优化高效索引指南.pdf

    Sql Server性能优化高效索引指南 Sql Server性能优化高效索引指南是指在Sql Server数据库中,通过合理地设计和优化索引来提高数据库性能的一系列指南和最佳实践。本指南涵盖了索引的基本概念、索引的类型、索引的...

    SQL终极优化(包括很多非索引方面的优化和原理)

    SQL终极优化(包括很多非索引方面的优化和原理)

    ORACLE索引详解及SQL优化

    此外,了解并运用Oracle的索引优化特性也很重要,如索引组织表(Index-Organized Table, IOT)、覆盖索引(Covering Index)以及物化视图(Materialized View)等。 总的来说,Oracle索引详解及SQL优化是一个深度...

    索引的SQL语句优化

    ### 知识点详解:“索引的SQL语句优化” #### 重要性 在数据库管理中,SQL(Structured Query Language)语句的优化是确保系统高效运行的关键环节。特别是在大型数据库环境中,一次低效的SQL查询可能会导致整个...

    Microsoft SQL Server 2008技术内幕 T-SQL 查询 索引优化章节 示例数据库脚本

    Microsoft SQL Server 2008技术内幕 T-SQL 查询 一书中,第四章,索引优化章节的示例数据库脚本。

Global site tag (gtag.js) - Google Analytics