浅谈数据库优化方面的经验

article/2025/8/23 7:16:24

浅谈数据库优化方面的经验

任何系统、网站几乎都离不开数据库,数据库好比人大脑的记忆系统,没有了数据库就没有了记忆系统。而数据库优化则相当于在同等智力的情况下,利用一种高效率地记忆方法进行更快更优的记忆。那么数据库优化具体有哪些呢?这里我罗列出7种经常用到的方法。


1.多用 LIMIT

很多情况下,我们知道查询表只会有一条结果。在这种情况下,我们不妨加上LIMIT 1,这样可以增加性能。MySQL数据库引擎会在找到一条数据后停止搜索,而不是占据cpu继续往下查直到查询表中的最后一条数据为止。

低效率:

String sql="SELECT * FROM tableName WHERE country='CHAIN' ";

高效率:

String sql="SELECT * FROM tableName WHERE country='CHAIN' LIMIT 1" ;

2.尽量不用ORDER BY RAND()

要从tablename表中随机提取一条记录,大部分的人写法是:

SELECT * FROM tablename ORDER BY RAND() LIMIT 1

但是官方是不提倡这种用法的,官方手册提及到ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。试着测试一下你就会知道效率非常低。一个20万余条的库,查询5条数据,居然要10秒以上。10秒的等待足以使一个用户失去所有耐心,这也是优化的必要性。
当你想使用随机取一条记录的时候,个人觉得用max(id) * rand()就可以了,花费的时间应该在0.1秒以内。


3. EXPLAIN你的SELECT查询

EXPLAIN关键字的作用是让你可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构。从根本处找出可以优化的地方,EXPLAIN的查询结果也会告诉你,你的索引主键被如何利用的,你的数据表是如何被搜索和排序的,通过对这些信息的查看,你可以对自己的查询语句做相应的调整
explain select * from statuses_status where id=11;


4.避免 SELECT *

我们需要哪些属性就取哪些,避免全盘接收。比如我们比如我们只需要查询id和name两个属性,那么我们可以使用

SELECT id,name FROM  TEACHER;

尽量避免使用select * ,虽然有时效果一样,但效率不一样。


5. 为搜索字段建索引

索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么,请为其建立索引吧。

普通索引   添加INDEX
ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
主键索引   添加PRIMARY KEY
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
唯一索引   添加UNIQUE
ALTER TABLE `table_name` ADD UNIQUE ( `column` )
全文索引   添加FULLTEXTmysql> alter table table_name add fulltext (`column` )

6.利用查询缓存来优化查询

当MySQL开启了缓存模式(query_cache_type=1)后,mysql会把查询语句和查询结果保存在一张hash表中,下一次用同样的sql语句查询时,mysql会先从这张hash表中获取数据,如果缓存没有命中,则解析sql语句,查询数据库。 当缓存的数据达到最大值(query_cache_size) 后,mysql会把老的数据删除掉,重新写入新的数据。
查看缓存的语句:

show variables like '%query_cache%' 

缓存图片


7.尽量不使用NOT IN和like语句操作

NOT IN和like“%aaa%”操作都不会使用索引,将进行全表扫描。可取的方法是NOT IN可以NOT EXISTS代替
(注意的是like “aaa%”是可以使用索引的)


8.UNION-ALL代替UNION

如果业务上没有特殊说明,可以考虑用UNION-ALL 替换UNION,因为UNION-ALL不会过滤重复数据,所执行效率要快于UNION,并且UNION可以自动排序,而UNION-ALL不会,这些细节往往都影响了数据库的性能。



编写人:梦想的边缘


http://chatgpt.dhexx.cn/article/N1Jym4hM.shtml

相关文章

面试求职:数据库常见面试题(数据库优化思路)

原文地址:http://www.2cto.com/database/201504/390838.html 1. 主键 超键 候选键 外键 主 键: 数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值…

面试不再尬聊的Mysql数据库优化方案

点赞多大胆,就有多大产!有支持才有动力!将技术分享给每一个技术使用者和爱好者! 干货满满,摆好姿势,点赞发车! 前言 数据库优化是一个老生常谈的问题,刚入门的小白或者工作N年的光头…

java系统性能优化之mysql数据库优化

java开发的应用系统经常面临系统响应时间过长的情况,可能的原因有很多方面,比如网络延迟、代码逻辑不合理,数据量太大、架构设计不合理、慢查询等。在优化的时候不能一上来就扑倒sql调优上,要整体查看性能损耗最大的地方在哪里&am…

数据库优化之中间表

过一段时间回看之前项目的数据库设计都忍不住吐槽,这谁写的(我自己),当然也说明自己进步了哈。 本篇主要从性能和编码方便的角度来看中间表的使用。 昨天看原来写的数据库就发现了问题!背单词app,单词书和…

浙江工业大学2023考研计算机学硕经验贴

文章目录 前言经验分享作息数学英语政治408 总体建议吐槽资源分享后面就是复试了选导师最后 前言 再开始前,先说一下自身情况,本人本科是浙江万里学院毕业的,同时也是一名二战生,一战的时候报的也是浙工大计算机学硕,…

杭电计算机研究生复试题

一、数据结构 线性存储和链式存储优缺点比较 1.1. 线性表的存储结构,优缺点 顺序存储结构可以直接存取数据元素,方便灵活、效率高,但插入、删除操作时将会引起元素的大量移动,因而降低效率。 链接存储结构中内存采用动态分配&am…

java 函数概述

函数 函数的定义函数调用函数分类局部变量方法重载函数递归 函数的定义 Java中函数也叫方法,是定义在类中的一段独立的代码块,用来实现某个功能;作用是提高代码的复用性和可读性。 语法格式: 修饰符 返回值类型 函数名(形式参数…

java中函数的应用。

我们把函数的特点和定义说完之后,我们来说说java中函数的基本应用。我们在编写程序其实就是在不断的实现功能,而java中最小的功能单元就是函数,所以我们日后再定义功能,都定义在一个独立的函数中去,而不要再乱七八糟塞…

Java函数总结

一.什么是函数: 为了解决某一特定问题,具有名称的的代码集合。JAVA函数也可以叫做方法,要调用方法可以通过对象去调用方法(如果方法是非静态的),也可以直接用类名去调用方法(如果方法是静态的&a…

JAVA方法(函数)的概念

JAVA中函数的概念,什么是函数? 答:函数英文称function,单一或相关联功能用来实现指定 要求功能的代码块,就是函数,函数在项目组可以直接进行调用且实现独立的功能,应对不同的实现需求的各种实现方法&#x…

Java方法(函数)

文章目录 Java方法(函数)一、方法介绍二、方法的定义和调用格式1. 快速入门2. Debug查看方法的执行流程3. 方法调用内存图解4. 带参数方法的定义和调用1)定义和调用格式2)形参和实参 5. 带返回值方法的定义和调用6. 方法通用定义格式 三、方法常见问题四…

java中的函数(概述)

java中的函数是比较重要的一个知识点。那么函数到底是什么呢,我们可以通过几点来进行学习,第一个是定义,第二个是特点,第三个是应用,第四个是重载。其中最重要的当然是函数的应用。定义和特点是为了入门所应用的&#…

JAVA函数(方法)

函数的概念: 函数是定义在类中的一段独立的代码块,用来实现某个功能。Java中,函数又被称为方法。 函数的主要作用是为了提高代码的复用性。 函数都是在栈内存中运行;运行的函数处在栈顶。 函数格式:修饰符 返回…

java函数

函数(function): 函数是什么? 函数就是具有名称的特定功能代码的集合。 为什么使用函数: 提高代码的复用度 Java中如何定义函数 访问修饰符 [static] 返回值的类型 函数名称([形式参数列表]) { // 函数体 由一行或者…

函数总结:

–函数是什么: 函数是封装了具备特定功能的一段代码块,具备特定功能的代码集合。 –为什么使用函数: 解决重复性代码问题,提高代码的复用度。–函数基本格式: 访问修饰符 [static] 返回值的类型 函数名称([形式参…

java 基础——函数(方法)

函数基本定义、语法 首先我们先要了解什么是函数? 函数的定义:在类中,有特定功能的一段独立代码块 说人话:简单来说就是,在一个类(一个 .java 文件)里面,一段有自己存在的意义&am…

云上见!操作系统开源社区重磅发布!

凌云时刻 极鲜速递 导读:2020 云栖大会「系统软件开源及生态专场」聚焦云时代系统软件技术的发展及开源生态面临的机遇和挑战,并将进行操作系统开源社区的重磅发布。 作者 | 阿里云操作系统来源 | 云巅论剑 2020 云栖大会将在 9 月 17 日 — 9 月 18 日…

万字干货:阿里巴巴是怎么做大数据算法应用测试的? | 凌云时刻

凌云时刻 洞见 导读:随着最近几年数据计算力与机器智能算法的兴起,大数据应用在各个行业也不断涌现。测试技术作为工程技术的一部分,也在同步演进。在 DT 时代,如何测试和保障一个基于大数据的应用的软件质量,成为测试…

在中国在行其道的智慧城市,为何折戟多伦多? | 凌云时刻

凌云时刻 洞见 导读:谷歌的母公司Alphabet于2017年开始,致力于将多伦多的Quayside社区改造成未来主义社区,承诺投入超过5000万美元用于使用技术减少交通拥放和垃圾填埋场。但是由于数据隐私问题,该计划迅速引发了争议&#xff0c…

应云而生,原力觉醒——解读云原生基础设施 | 凌云时刻

凌云时刻 极鲜速递 导读:云原生是云计算领域的热点之一。就像 “一千个人眼里有一千个哈姆雷特”,大家对"云原生"的定义也见仁见智。本文将介绍云原生应用架构和生命周期管理的进化方向。 作者 | 易立 来源 | 凌云时刻(微信号&…