首页 > 数据库 >今日一学,sql优化,创建索引的优缺点

今日一学,sql优化,创建索引的优缺点

时间:2024-09-29 22:12:27浏览次数:1  
标签:一学 数据库 优缺点 查询 索引 全表 sql 优化

收藏了,但是不打开,久而久之就忘了,今日一学!所谓是好记性不如烂键盘。
** 2024Java offer收割指南 **

sql优化

  1. 尽量避免使用 select * ,返回无用的字段会降低效率。优化方式:只能使用具体的字段代替 select 具体字段,只返回使用到的字段。(虽然我经常select * 但是一个表字段非常多,那就慢很多,特别是查多数据的时候。为什么一个表那么多字段呢?等你接手遗留项目就知道了)

  2. 尽量避免使用 in 和 not in,会导致数据库引擎放弃索引进行全表扫描。优化方
    式:可以用 exists,join代替。(正常公司数据量都不大,所以我也经常用in,甚至查id我都用in,为什么会影响性能呢,应该是当其中包含 NULL 值时,优化器可能会认为全表扫描比使用索引更有效)

  3. 尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描。优化方式:尽量在字段后面使用模糊查询。(这个不知道的罚你回去写1000行sql)

  4. 尽量避免进行 null 值的判断,会导致数据库引擎放弃索引进行全表扫描。优化方式:可以给字段添加默认值 0,对 0 值进行判断。(你看看,又是null值)

索引

  • 索引的实现通常使用 B树及其变种 B+树(2者区别可以看看,不难理解,面对面试官又能说一波)。
  • 索引的作用:协助快速查询,可以保证数据库表中每一行数据的唯一性。可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
  • 索引的代价:
    1. 是增加了数据库的存储空间(你都说用B+的数据结构,那自然要把结构给存下来,不是吗);
    2. 是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)
  • 那把所有字段都定为索引不就好啦?(缺点你是一点都不看)
    1. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间
    2. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度
  • 创建索引的原则
    1. 最左前缀匹配原则(一直向右匹配直到遇到范围查询就停止匹配)
    2. =和 in 可以乱序(建立索引是可以任意顺序的,mysql 的查询优化器会帮你优化成索引可以识别的形式)(可以偷偷去学习下sql语句的执行过程)
    3. 尽量选择区分度高的列作为索引
    4. 索引列不能参与计算
    5. 尽量的扩展索引,不要新建索引(如 a->(a,b)只需要修改原来的索引,注意:数据量太大,创建索引是需要时间的,宕不宕机就看你了)
    6. 选择唯一性索引(id)
    7. 为经常需要排序、分组和联合操作的字段建立索引
    8. 为常作为查询条件的字段建立索引
    9. 删除不再使用或者很少使用的索引

看完就当加深下记忆,面试时候继续吹

标签:一学,数据库,优缺点,查询,索引,全表,sql,优化
From: https://www.cnblogs.com/xswz/p/18440858

相关文章

  • PostgreSQL是否有等待事件
    PostgreSQL是否有等待事件PostgreSQL提供了等待事件(WaitEvents)的机制,用于监控数据库运行过程中因资源争用而导致的等待情况。这些等待事件可以帮助数据库管理员识别导致性能问题的瓶颈,例如锁冲突、I/O等待等。什么是等待事件?等待事件是指PostgreSQL中的进程在等待某......
  • 基于Python+flask+MySQL+HTML的全国范围水质分析预测系统,可视化用echarts,预测算法随机
    1绪论近年来,水质监测系统的进步显著,这在全球环保意识不断提升的背景下尤为明显。大量资源被投入到水质监测技术的研发和应用中,以不断优化监测效能。水资源的保护及健康环境的维护,这种趋势旨在提升人们生活质量,确保优质的生活条件。通过持续不懈的努力,我们得以实现对水质的及......
  • Windows下绿色安装PostgreSQL笔记
    介绍PostgreSQL,Postgres,以下简称为PG,是一款关系型数据库,本地安装支持两种方式,一键安装和绿色解压安装两种方式下载、解压安装版:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads绿色解压版:https://www.enterprisedb.com/download-postgres......
  • MySQL8主从搭建
    MySQL8主从搭建基础环境基本信息:虚拟化软件:OracleVMVirtualBox1C/2G1个网卡80G系统盘oracle:mysql-8.0.20yum:CentOS-7.6-x86_64-DVD-1810.iso服务器IP规划:主机名mysql1mysql2mysql3系统CentOS-7.6CentOS-7.6CentOS-7.6IP192.168.56.41192.168.56.42192.168.56.......
  • MySQL数据库初级学习笔记---第一章-数据库概述
    第一章-数据库概述聊聊数据库数据库是一门独立的学科,只要是做软件开发的,数据库都要学。数据库(电子化的文件柜)是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。它的存储空间很大,可以存放百万条......
  • MySQL 默认 only_full_group_by
    ONLY_FULL_GROUP_BY是MySQL中的一个SQL模式,它要求在使用GROUPBY语句时,SELECT列表、HAVING条件或ORDERBY列表中的每个列,要么是聚合函数的一部分(如COUNT(),SUM(),AVG()等),要么必须在GROUPBY子句中明确指定。这个模式的设计初衷是增强查询的准确性和可预测性,避免因为列的不明确引......
  • Flink(六)Table API和Flink SQL
    TableAPI和FlinkSQL整体介绍概念TableAPI是一套内嵌在Java和Scala语言中的查询API,它允许我们以非常直观的方式,组合来自一些关系运算符的查询,比如select、filter和joinFlinkSQL,就是直接可以在代码中写SQL,来实现一些查询(Query)操作无论输入是批输入还是流式输入,在这两套API......
  • PbootCMS数据库配置,修改为Mysql数据库,配置Mysql出错解决办法
    在PbootCMS中,如果你需要将默认的SQLite数据库切换为MySQL数据库,可以按照以下步骤进行操作。以下是详细的步骤和示例代码:1.导入MySQL数据库文件备份现有数据:确保先备份现有的SQLite数据库。导入MySQL数据库文件:将MySQL数据库文件(位于/static/backup/sql/xxx.sql)导入到MySQL......
  • MySQL窗口函数总结(三)
    MySQL窗口函数(WindowFunctions)是一种高级的SQL查询技巧,它允许在结果集的一组相关行上执行计算。窗口函数可以用于处理分组、排序、累计等复杂的聚合任务,使得查询更加简洁和高效。在MySQL8.0及更高版本中,支持窗口函数。以下是一些常用的窗口函数:ROW_NUMBER():为结果集中的......
  • MySQL窗口函数汇总(二)
    MySQL窗口函数详解MySQL从8.0版本开始引入了窗口函数,这是一个强大的特性,可以大大简化复杂的数据分析任务。本文将详细介绍MySQL窗口函数的概念、语法和常见用法,并结合实际应用场景进行说明。什么是窗口函数?窗口函数是一种能够对结果集中的一组行进行操作的函数。它们类似于聚合函......