【数据库】性能优化

Postgresql频繁delete表数据后,数据库表数据很少,但是查询速度超级慢 数据库的表里只有一千多条数据,系统中有两个定时任务,每隔1分钟会对表数据进行一次delete和insert,刚开始数据查询很快,但是在运行了一段时间后,这个表的查询速度就越来越慢,达到了十几秒。 阅读详情

1. 查询缓存优化

 

 

// 查询缓存不开启
$r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()");

 
// 开启查询缓存
$today = date("Y-m-d");
$r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");

像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。所以,你所需要的就是用一个变量来代替MySQL的函数,从而开启缓存。

 

2. 只有一行时候采用Limit 1

当你查询表的有些时候,你已经知道结果只会有一条结果,但因为你可能需要去fetch游标,或是你也许会去检查返回的记录数。

在这种情况下,加上 LIMIT 1 可以增加性能。这样一样,MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据。

下面的示例,只是为了找一下是否有“中国”的用户,很明显,后面的会比前面的更有效率。(请注意,第一条中是Select *,第二条是Select 1)

 

// 没有效率的:
$r = mysql_query("SELECT * FROM user WHERE country = 'China'");
if (mysql_num_rows($r) > 0) {
    // ...
}

 
// 有效率的:
$r = mysql_query("SELECT 1 FROM user WHERE country = 'China' LIMIT 1");
if (mysql_num_rows($r) > 0) {
    // ...
}

3.为搜索字段建立索引

如果在表中某个字段需要经常搜索,那么需要建立索引

 

4. 在使用Join使用相当类型,并建立索引

如果应用中有好多join,应该确认两个表是被建立过索引

 

// 在state中查找company
$r = mysql_query("SELECT company_name FROM users
    LEFT JOIN companies ON (users.state = companies.state)
    WHERE users.id = $user_id");

 
// 两个 state 字段应该是被建过索引的,而且应该是相当的类型,相同的字符集。

5. 避免使用 select * 

 

// 不推荐
$r = mysql_query("SELECT * FROM user WHERE user_id = 1");
$d = mysql_fetch_assoc($r);
echo "Welcome {$d['username']}";

 
// 推荐
$r = mysql_query("SELECT username FROM user WHERE user_id = 1");
$d = mysql_fetch_assoc($r);
echo "Welcome {$d['username']}";

6. 为每张表设置一个ID

数据库中每张表都要设计一个ID为主键,而且最好是一个INT类型的,并设置Auto_Increment

Varchar 作为主键会降低性能, 集群,分区等操作会用到主键

 

7. 使用Enum 而不是varchar

Enum 是非常快和紧凑的,实际上保存的是TINYINT

 

8. 尽可能使用NotNull

 

9. 固定长度的表会更快

如果表中的长度都是固定的,整个表会认为是静态表(没有Varchar, Text, Blob),这样这个搜索引擎会用另外一种方法处理

因为这些固定的长度是很容易计算下一个数据的偏移量的,所以读取的自然也会很快。而如果字段不是定长的,那么,每一次要找下一条的话,需要程序找到主键。

 

10. 垂直分割

垂直分割是把一种数据库中的表分成几张表,这样可以降低表的复杂度和字段数目

示例一:在Users表中有一个字段是家庭地址,这个字段是可选字段,相比起,而且你在数据库操作的时候除了个人信息外,你并不需要经常读取或是改写这个字段。那么,为什么不把他放到另外一张表中呢? 这样会让你的表有更好的性能,大家想想是不是,大量的时候,我对于用户表来说,只有用户ID,用户名,口令,用户角色等会被经常使用。小一点的表总是会有好的性能。

示例二: 你有一个叫 “last_login” 的字段,它会在每次用户登录时被更新。但是,每次更新时会导致该表的查询缓存被清空。所以,你可以把这个字段放到另一个表中,这样就不会影响你对用户ID,用户名,用户角色的不停地读取了,因为查询缓存会帮你增加很多性能。

11. 拆分大的Delete 和 Insert 语句

如果需要执行大量的Delete 和 Insert 需要拆分, 因为这些操作会锁表

拆分:

 

while (1) {
    //每次只做1000条
    mysql_query("DELETE FROM logs WHERE log_date <= '2009-11-01' LIMIT 1000");
    if (mysql_affected_rows() == 0) {
        // 没得可删了,退出!
        break;
    }
    // 每次都要休息一会儿
    usleep(50000);
}

12. 越小越快

对于大多数引擎来说,硬盘是瓶颈,所以需要把数据变得紧凑

大数据-数据仓库-Hive总结及性能优化 Hive是构建在Hadoop之上的数据仓库软件。它提供类似sql的查询语句HiveQL对数据进行分析处理,Hive将HiveQL语句转换成一系列MapReduce作业并执行。 阅读详情

相关推荐

Database Performance Optimization in MySQL.

作者:禅与计算机程序设计艺术 1.简介 数据库性能优化指的是优化现有数据库或系统以达到更好的运行效果。本文将详细阐述MySQL的性能优化方法论、基本概念及术语、核心算法原理及操作步骤、相关代码实例和相应说明以及未来的发展方向与挑战等。 2.前提条件

AI天才研究院 741

高并发接口实现、大数据批量插入、修改、删除优化

Java高并发接口实现、大数据批量插入、修改、删除优化

qq_52231508的博客 1364

Abaqus小白必看:用Micromechanics Plugin轻松搞定RVE周期性边界条件(附避坑指南)

本文为Abaqus初学者提供了使用官方Micromechanics Plugin插件高效实现复合材料代表性体积单元分析的完整指南。文章详细讲解了从插件安装、模型准备、周期性边界条件自动设置到结果验证的全流程,并重点分享了处理复杂模型和避免常见错误的实用技巧,帮助用户大幅提升RVE分析效率与准确性。

weixin_28363123的博客 796

mysql:21个性能优化最佳实践之17[拆分大的 DELETE 或 INSERT 语句]

拆分大的 DELETE 或 INSERT 语句         如果你需要在一个在线的网站上去执行一个大的 DELETE 或 INSERT 查询,你需要非常小心,要避免你的操作让你的整个网站停止相应。因为这两个操作是会锁表的,表一锁住了,别的操作都进不来了。   Apache 会有很多的子进程或线程。所以,其工作起来相当有效率,而我们的服务器也不希望有太多的子进程,线程和数据库链接,这是极

ZYallers 2279

CSP-J第一道模拟题——贪心的小朋友

第一行是一个整数 n,表示糖果的堆数 第二行是由空格分隔的 n 个正整数,即数组 candies,表示每堆糖果的数量。后一个离场的小朋友所拿的糖果总堆数必须小于前一个小朋友(对第一个小朋友没有限制)后一个离场的小朋友所拿的糖果总量必须小于前一个小朋友(对第一个小朋友没有限制)这道题目很简单,但是必须删去无用的部分,看清题目,才能得分哦!输出一行共一个整数,表示最多可能有多少个小朋友吃上了美味的糖果。输出最多可能有多少个小朋友吃上了美味的糖果。离场之后的小朋友才能吃上美味的糖果。每个小朋友可以拿多堆糖果。

weixin_29959235的博客 639

IO多路转接 ——— select、poll、epoll

select是系统提供的一个多路转接接口。select函数的函数原型如下: 参数说明:参数timeout的取值:返回值说明:select调用失败时,错误码可能被设置为:fd_set结构与sigset_t结构类似,fd_set本质也是一个位图,用位图中对应的位来表示要监视的文件描述符。 调用select函数之前就需要用fd_set结构定义出对应的文件描述符集,然后将需要监视的文件描述符添加到文件描述符集当中,这个添加的过程本质就是在进行位操作,但是这个位操作不需要用户自己进行,系统提供了一组专门的接口,用

2021dragon的博客 7977

你能抗住Mysql这13问吗?

想进大厂,mysql不会那可不行,来接受mysql面试挑战吧,看看你能坚持到哪里?1. 能说下myisam 和 innodb的区别吗?myisam引擎是5.1版本之前的默认引擎,支持全文...

JAVA葵花宝典 592

C++控制台实现简单的注册登录

C++控制台实现简单的注册登录 #include<iostream> #include<string> #include <vector> #include <conio.h> void Display();//调用display显示switch()界面 void Register();//注册 void Enter();//登录 using nam...

乔路非 2万+

数据仓库的 RDBMS 性能优化指南

数据仓库的 RDBMS 性能优化指南 本性能优化指南旨在帮助数据库管理员和开发人员配置 Microsoft? SQL Server? 2000,以获得最佳的性能,并帮助找出造成关系数据库(包括用于数据仓库的数据库)性能低下的原因。本指南还就如何装载、索引和编写查询以访问 SQL Server 中存储的数据提供了指导原则和最佳做法。

放牛郎'S Weblog 2361

公文派2025:免费社区版重大安装更新!

距离上一次更新已经过去了将近一年的时间,今天我们带来了全新的免费2025社区版,该版本也是目前最新的版本,无需授权即可使用所有的功能。

似最初 1963

银河麒麟桌面版V10搭建Qt4.8.6开发环境

银河麒麟桌面版V10搭建Qt4.8.6开发环境

qq_34932364的博客 2399

Search-Replace-DB性能优化:处理百万级数据库记录的最佳策略

Search-Replace-DB是一个强大的PHP和MySQL数据库迁移工具,专门用于帮助开发者在迁移网站时安全地进行数据库搜索和替换操作。当面对百万级数据库记录时,性能优化变得至关重要。本文将分享处理大规模数据库记录的最佳策略,帮助您高效完成数据库迁移任务。🚀 ## 为什么需要性能优化? Search-Replace-DB在处理大规模数据库时,主要面临内存消耗、执行时间和服务器资源限制三

gitblog_00917的博客 1045

unity6000.0.3版本URP下ScriptableRendererFeature如何实现一张自定义贴图效果?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 584

db性能优化:处理大型数据库快照的7个实用技巧与策略

在数据库管理中,高效处理大型数据库快照是提升工作流效率的关键环节。db作为一款强大的数据库版本控制工具,允许用户通过命令行轻松保存、恢复和归档数据库快照。本文将分享7个实用技巧,帮助你优化db工具在处理大型数据库快照时的性能,让快照操作更快速、更可靠。 ## 1. 精准选择快照内容:只保存必要数据 处理大型数据库时,完整快照往往包含大量冗余数据。db工具提供了灵活的表级快照功能,允许你只保存关

gitblog_00456的博客 162

Redhawk:什么是timing window?

STA timing file中timing window的作用和计算方式

m0_61544122的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

实测!DB-GPT向量存储深度测评:8大数据库集成方案与性能优化指南

你是否还在为向量数据库选型发愁?尝试了多种集成方案却始终无法兼顾性能与兼容性?作为AI应用的核心基础设施,向量存储的选择直接影响RAG(检索增强生成)效果与系统响应速度。本文将系统讲解DB-GPT如何无缝对接主流向量数据库,通过实战案例带你掌握从配置到优化的全流程,让你的AI应用检索精度提升40%,响应速度缩短至毫秒级。 读完本文你将获得: - 8种主流向量数据库的集成对比表 - 3步完成向量存...

gitblog_00574的博客 903

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Chat2DB性能工程:全链路性能优化方法论

在当今数据驱动的时代,数据库管理工具的性能直接影响开发者的工作效率和系统稳定性。Chat2DB作为一款支持16+数据库的智能SQL客户端,面临着复杂的性能挑战:多数据库适配、AI智能SQL生成、实时数据同步等场景都对性能提出了极高要求。 本文将深入探讨Chat2DB的全链路性能优化方法论,从架构设计到代码实现,为您揭示高性能数据库工具的性能工程实践。 ## 一、Chat2DB架构性能分析 #...

gitblog_00172的博客 1046

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

upper/db 性能优化秘籍:10个技巧提升数据库操作效率

upper/db 是一个用于简化数据库操作的上层封装库,支持多种数据库,通过优化配置和使用方法可以显著提升应用程序的数据库操作效率。本文将分享10个实用技巧,帮助开发者充分发挥 upper/db 的性能潜力。 ## 1. 启用预编译语句缓存加速重复查询 预编译语句缓存可以避免重复解析相同SQL语句的开销。通过 `SetPreparedStatementCache(true)` 启用缓存后,相同结

gitblog_00131的博客 804

数据仓库: 8- 数据仓库性能优化

数据倾斜: 是指在数据分布过程中, 某些数据节点 (分区或任务) 上的数据量远远多于其它节点, 导致任务的执行时间取决于最慢的节点;某字段值过于集中 (如用户ID中大量重复值);数据分区方式导致某些分区存储了过多的数据;键值分布不均匀, 聚合或链接操作时部分键值过大;数据倾斜是数据仓库性能优化中的一个常见问题, 需要结合具体业务场景、数据分布特点以及查询模式来选择合适的解决方案;理解数据倾斜的原因、识别数据倾斜的节点, 并采取相应的措施, 可以有效提高数据仓库的查询性能 .

Taerge0110的博客 2124

java h2 性能_最佳实践使用JAVA内存数据库h2database性能优化.doc

最佳实践使用JAVA内存数据库h2database性能优化最佳实践:使用JAVA内存数据库h2 database性能优化分类:Java性能优化作者:凡彬勇日期:2011-08-1导读:使用JAVA内存数据库h2 database性能优化,提高数据处理速度,解决IO瓶颈问题问题我们在开发应用都知道IO是系统性能的瓶颈,在应用开发中,我们会经常碰到以下问题:1.系统在不断实时地访问数据库时,一秒钟对同...

weixin_39993623的博客 1334

数据仓库的性能优化方法

1.背景介绍 数据仓库是一种用于存储和管理大量历史数据的系统,它通常用于支持企业的决策制定和数据分析。随着数据规模的增加,数据仓库的性能优化成为了一个重要的问题。在这篇文章中,我们将讨论数据仓库性能优化的方法和技术,以及相关的算法和实例。 2.核心概念与联系 数据仓库性能优化的核心概念包括: 1.数据仓库的查询性能:查询性能是指数据仓库系统对于用户查询请求的响应速度和效率。查询性能是数据仓...

AI天才研究院 1171

从数据仓库搭建把握复杂查询和数据分析性能优化

通过合理的数据抽取和转换,以及灵活的数据模型设计和查询优化,数仓可以支持复杂查询和数据分析的性能优化。数据仓库是一种重要的数据管理与分析的解决方案,在业务中扮演着重要角色,怎么样搭建一个能够高效满足业务需求的数仓,并且能够为后续的业务提供强大的支持?通过合理的数据模型设计、索引优化、分区策略和查询优化等方式,可以提高查询效率和数据分析的性能。在进行索引优化时,需要根据实际查询需求和数据特点选择合适的索引策略,并进行索引的调优和监控。的方式,只抽取和转换新增的数据,避免全量数据的重复处理。

oOBubbleX的博客 1455

Python 数据库事务、锁机制与性能优化

``htmlPython 数据库事务、锁机制与性能优化。

2501_91169693的博客 1842

ESP32 无感 BLDC 方波控制实战:用比较器检测反电动势过零点

家里那台无刷风扇的驱动板只有巴掌大,里面连一片霍尔传感器都没有,可它照样能按 PWM 指令精准调速。你给 `esp-iot-solution` 仓库的 `esp_sensorless_bldc_control` 组件接上三路比较器输出,电机就能在无传感器状态下完成方波(六步换向)启动和闭环调速——这就是**反电动势过零点检测**加硬件比较器方案的威力。下面从信号是怎么产生的讲起,再拆软件链路,最后

gitblog_00645的博客 1040

libc-database性能优化指南:如何处理大规模libc数据库的快速查询

libc-database是一个用于构建libc偏移量数据库以简化漏洞利用的强大工具。随着数据库规模的增长,查询性能可能成为瓶颈。本文将分享一系列实用优化技巧,帮助你实现大规模libc数据库的快速查询,提升工作效率。 ## 🚀 核心优化策略:缓存机制的应用 缓存是提升查询性能的关键手段之一。在libc-database的搜索引擎实现中,开发团队巧妙地运用了Python的`lru_cache`

gitblog_00447的博客 480
上一篇: 【数据库】事务
下一篇: 【数据库】EXPLAIN
三生石1103
博客等级 码龄12年 16粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值