HMTT——数据库优化

2023-05-16

数据库优化

  • 前言
  • 数据库优化
    • 1 理解索引
    • 2 SQL查询优化
  • 3 数据库优化


前言

数据库优化

数据库是Web应用至关重要的一个环节,其性能的优劣会影响整合Web应用,所以需要对数据库进化优化以提高使用性能。以下提供几点方法作为参考。

1 理解索引

数据库索引

2 SQL查询优化

  • 避免全表扫描,应考虑在 where 及 order by 涉及的列上建立索引;

  • 查询时使用select明确指明所要查询的字段,避免使用select *的操作;

  • SQL语句尽量大写,如

  SELECT name FROM t WHERE id=1

对于小写的sql语句,通常数据库在解析sql语句时,通常会先转换成大写再执行。

  • 尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE;
 SELECT id FROM t WHERE name LIKE ‘abc%

对于模糊查询,如:

  SELECT id FROM t WHERE name LIKE ‘%abc%

或者

  SELECT id FROM t WHERE name LIKE ‘%abc’

将导致全表扫描,应避免使用,若要提高效率,可以考虑全文检索;

遵循最左原则,在where子句中写查询条件时把索引字段放在前面,如

mobile为索引字段,name为非索引字段
推荐

  SELECT ... FROM t WHERE mobile='13911111111' AND name='python'

不推荐

  SELECT ... FROM t WHERE name='python' AND mobile='13911111111' 

建立了复合索引 key(a, b, c)
推荐

  SELECT ... FROM t WHERE a=... AND b=... AND c= ...
  SELECT ... FROM t WHERE a=... AND b=...
  SELECT ... FROM t WHERE a=...

不推荐 (字段出现顺序不符合索引建立的顺序)

  SELECT ... FROM t WHERE b=... AND c=...
  SELECT ... FROM t WHERE b=... AND a=... AND c=...
  ...

能使用关联查询解决的尽量不要使用子查询,如

子查询

SELECT article_id, title FROM t_article WHERE user_id IN (SELECT user_id FROM t_user  WHERE user_name IN ('itcast', 'itheima', 'python'))

关联查询(推荐)

  SELECT b.article_id, b.title From t_user AS a INNER JOIN t_article AS b ON a.user_id=b.user_id WHERE a.user_name IN ('itcast', 'itheima', 'python');

能不使用关联查询的尽量不要使用关联查询;

不需要获取全表数据的时候,不要查询全表数据,使用LIMIT来限制数据。

3 数据库优化

  • 在进行表设计时,可适度增加冗余字段(反范式设计),减少JOIN操作;
  • 多字段表可以进行垂直分表优化,多数据表可以进行水平分表优化;
  • 选择恰当的数据类型,如整型的选择;
  • 对于强调快速读取的操作,可以考虑使用MyISAM数据库引擎;
  • 对较频繁的作为查询条件的字段创建索引;唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件;更新非常频繁的字段不适合创建索引;
  • 编写SQL时使用上面的方式对SQL语句进行优化;
  • 使用慢查询工具找出效率低下的SQL语句进行优化;
  • 构建缓存,减少数据库磁盘操作;
  • 可以考虑结合使用内在型数据库,如Redis,进行混合存储。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HMTT——数据库优化 的相关文章

  • OpenCV-Python ——图像加文字

    Opencv 视频添加文字和标记框 前言一 OpenCV添加文字问题二 解决思路1 OpenCV图片转换为PIL图片格式2 使用PIL绘制文字3 PIL图片格式转换成OpenCV的图片格式 三 完整代码 前言 最近做了个视屏实时处理的需求
  • Django——工程搭建

    Django的工程搭建 目录 Django的工程搭建一 环境搭建1 创建虚拟环境2 安装Django3 虚拟环境和pip的命令 二 创建工程1 创建2 工程目录说明3 运行开发服务器 三 创建子应用1 创建2 子应用目录说明3 注册安装子应
  • Django——配置静态文件与路由

    静态文件与路由 一 配置文件1 BASE DIR2 DEBUG3 本地语言与时区 二 静态文件三 路由说明1 路由定义位置2 路由解析顺序3 路由命名与reverse反解析 xff08 逆向 xff09 3 1 路由命名3 2 revers
  • Django——请求与响应

    请求与响应 一 请求Request1 URL路径参数2 Django中的QueryDict对象3 查询字符串Query String4 请求体4 1 表单类型 Form Data4 2 非表单类型 Non Form Data 5 请求头6
  • 设计模式——单例模式/工厂模式

    设计模式 前言一 单例模式第 1 种 xff0c 重写 new 方法第 2 种 xff0c 闭包定义装饰器第 3 种 xff0c 多线程中构建单例 二 工厂模式1 简单工厂2 工厂方法3 抽象工厂 前言 常见的设计模式 xff0c 它们是
  • STM32 Futaba SBUS协议解析

    STM32 Futaba SBUS协议解析 1 S BUS1 1 协议介绍1 2 协议解析 2 硬件设计2 1 硬件参数2 2 反相电路 3 程序设计3 1 数据接收3 2 数据处理 4 最后 1 S BUS 1 1 协议介绍 S BUS是
  • Django——类视图

    类视图 前言1 类视图1 类视图引入2 类视图使用 2类视图原理3类视图使用装饰器3 1 在URL配置中装饰3 2 在类视图中装饰 4 类视图Mixin扩展类 前言 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a 例如 xf
  • 设计模式——观察者模式

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 观察者模式 认识观察者模式观察者模式定义一 应用案例二 Python 实现总结 认识观察者模式 我们先看看报纸和杂志的订阅是怎么回事 xf
  • 面向对象设计原则

    面向对象设计原则是设计模式的基础 xff0c 每一个设计模式都符合某一个或者多个面向对象设计原则 xff0c 面向对象设计原则是用于评价一个设计模式的使用效果的重要指标之一 单一职责原则 一个对象应该只包含单一的职责 xff0c 并且该职责
  • 线程互斥锁 Lock

    线程互斥锁 Lock 前言Python 线程互斥锁1 创建互斥锁锁定资源 解锁资源 Python 线程死锁1 引入库 重点总结 前言 Python 线程互斥锁 1 创建互斥锁 span class token comment 导入线程thr
  • 多线程互斥锁Lock和RLock区别

    Python多线程互斥锁Lock和RLock区别 互斥锁Lock和RLock介绍互斥锁Lock互斥锁RLock区别 特殊情况 互斥锁Lock和RLock介绍 互斥锁Lock Lock被称为 原始锁 xff0c 原始锁是一个 在锁定时不属于特

随机推荐

  • 信号量semaphore

    python线程信号量semaphore 前言一 简介semaphore信号量相关函数semaphore信号量使用 前言 一 简介 多线程同时运行 xff0c 能提高程序的运行效率 xff0c 但是并非线程越多越好 xff0c 而semap
  • 线程事件 Event

    Python 线程事件 Event 前言一 介绍二 原理三 应用四 总结 前言 一 介绍 set 全局内置标志 Flag xff0c 将标志 Flag 设置为 True 通知在等待状态 wait 的线程恢复运行 isSet 获取标志 Fla
  • 线程定时器 Timer

    Python 线程定时器 Timer 原理 前言一 原理二 应用总结 前言 一 原理 指定时间间隔后启动线程 xff01 适用场景 xff1a 完成定时任务 xff0c 例如 xff1a 定时提醒 闹钟等等 span class token
  • 线程条件变量 Condition

    Python 线程条件变量 Condition 函数 前言 一 原理 二 应用 案例一 成语接龙 案例二 生产者与消费者模式 总结 前言 Python 互斥锁 Lock 主要作用是并行访问共享资源时 保护共享资源 防止出现脏数据 Pytho
  • Django——中间件

    Django中间件 前言1 中间件的定义方法2 执行流程3 多个中间件的执行顺序 前言 Django中的中间件是一个轻量级 底层的插件系统 xff0c 可以介入Django的请求和响应处理过程 xff0c 修改Django的输入或输出 中间
  • C语言中关于全局变量的深入理解及使用方式

    以前觉得全局变量很简单 xff0c 没有好好思考和理解 xff0c 看到其他项目中的一些用法不太理解 xff0c 最近正好有空 xff0c 好好梳理了一下关于全局变量的定义和引用 总的来说 xff0c 有以下几种方式 xff1a 方式1 x
  • Django——jinja2模板

    Django中使用jinja2模板 前言jinja2介绍1 安装jinja2模块2 Django配置jinja23 jinja2模板的使用绝大多数和Django自带模板一样4 jinja2自定义过滤器 前言 jinja2介绍 Jinja2
  • Django——自带模板

    Django自带模板使用 前言1 模板配置使用1 配置2 定义模板3 模板渲染 2 模板语法2 1 模板变量2 2 模板语句 3 过滤器4 模板继承5 模板注释 前言 1 模板配置使用 1 配置 在工程中创建模板目录templates 在s
  • Django——CSRF

    CSRF 前言CSRF防止 CSRF 攻击CSRF TOKEN的设置过程 前言 CSRF CSRF全拼为Cross Site Request Forgery xff0c 译为跨站请求伪造 CSRF指攻击者盗用了你的身份 xff0c 以你的名
  • 设计模式——工厂模式

    工厂方法模式 1 前言2 简介3 概念示例4 应用示例5 适用场景6 实现方式7 工厂方法模式优缺点8 与其它模式的关系 1 前言 工厂模式属于创建型模式 xff0c 它提供了一种创建对象的最佳方式 在工厂模式中 xff0c 我们在创建对象
  • Django——数据库

    Django数据库 ORM框架配置定义模型类1 定义2 迁移3 添加测试数据 4 演示工具使用1 shell工具2 查看MySQL数据库日志 5 数据库操作 增 删 改 查1 增加2 删除3 修改4 查询1 基本查询2 过滤查询 3 查询集
  • Django——Admin站点

    Admin站点 前言 使用Admin站点 1 管理界面本地化 2 创建超级管理员 3 App应用配置 4 注册模型类 5 调整站点信息 调整列表页展示 1 列表中的列显示哪些字段 2 页大小 3 操作选项 的位置 4 右侧栏过滤器 5 搜索
  • HMTT——数据库设计

    数据库设计 前言 1 需求 2 注意事项 MySQL数据库引擎 前言 1 需求 根据黑马头条前台产品原型图中用户端的部分 进行数据库设计 表结构 字段类型 是否允许为null 是否有默认值 索引设计 数据库引擎的选择 2 注意事项 为了查询
  • HMTT——ORM

    理解ORM 前言orm作用使用ORM的方式选择 前言 orm作用 省去自己拼写SQL xff0c 保证SQL语法的正确性 一次编写可以适配多个数据库 防止注入攻击 在数据库表名或字段名发生变化时 xff0c 只需修改模型类的映射 xff0c
  • HMTT——SQLAlchemy映射构建

    SQLAlchemy映射构建 前言 1 简介 2 安装 3 数据库连接设置 4 模型类字段与选项 5 构建模型类映射 前言 1 简介 SQLAlchemy是Python编程语言下的一款开源软件 提供了SQL工具包及对象关系映射 ORM 工具
  • HMTT——SQLAlchemy操作

    SQLAlchemy操作 前言 1 新增 2 查询 3 更新 4 删除 5 事务 前言 1 新增 user span class token operator span User span class token punctuation s
  • C语言 存储设备 地址, 字节数

    字节数 xff1a 单片机是多少位的 xff0c 对应的一个地址里面存在的字节数 就是几个字节 xff1a 比如 xff1a 32位单片机 xff0c 那一个地址应该最多存放4个字节 xff0c 一个字节8位 多少位 单片机 VS 地址 V
  • HMTT——数据库理论

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 数据库理论 前言 1 复制集与分布式 2 MySQL 1 主从复制 2 分库分表 sharding 垂直拆分 水平拆分 3 黑马头条项目应用 前言 1 复制集与分布式 复制集
  • HMTT——分布式ID

    分布式ID 前言 1 方案选择 UUID Redis 雪花算法 Snowflake 2 雪花算法实现 前言 1 方案选择 UUID UUID是通用唯一识别码 Universally Unique Identifier 的缩写 开放软件基金会
  • HMTT——数据库优化

    数据库优化 前言数据库优化1 理解索引2 SQL查询优化 3 数据库优化 前言 数据库优化 数据库是Web应用至关重要的一个环节 xff0c 其性能的优劣会影响整合Web应用 xff0c 所以需要对数据库进化优化以提高使用性能 以下提供几点