当前位置: 首页 > news >正文

【MySQL】SQL优化、char、varchar、外键约束、排查慢sql等重点知识汇总

目录

SQL语句

char和varchar比较

SQL语句如何优化

说一下你理解的外键约束

如何排查慢 sql


SQL语句

对库操作

创建数据库

create database 数据库名

删除数据库

drop database 数据库名

显示所有数据库

show databases

选中数据库

use 数据库名

对表操作

创建表

create table 表名(列名 类型,列名 类型...)

删除表

drop table 表名

查看指定表结构

desc 表名

查看当前库所有表

show tables

对数据操作

新增数据

insert into 表名 values (值,值...)

删除数据

delete from 表名 where 条件

查询数据

select 列名 from 表名

修改数据

update 表名 set 列名=值,列名=值... where 条件

char和varchar比较

char和varchar的区别如下:

  1. char类型可存储字符上限为255,varchar类型可存储字符上限与表的编码格式有关。
  2. char(L) 定义后,无论存储的字符串长度是否到达L,都会开辟用于存储L个字符的定长空间,如果存储的字符串长度超过L则会报错。
  3. varchar(L) 定义后,会根据存储字符串的长度按需开辟空间,并且需要使用1-3字节的空间用于表示存储字符串的长度以及其他控制信息,如果存储的字符串长度超过L则会报错。

char和varchar的优缺点如下:

  1. char类型的数据是定长的,因此磁盘空间比较浪费,但是效率高(直接访问定长的空间)。
  2. varchar类型的数据是变长的,因此磁盘空间比较节省,但是效率低(需要先读取存储字符串的长度,再访问指定长度的空间)。
  3. 如果要存储的数据是定长的,那就使用char类型进行存储,比如身份证号码、手机号、md5等。
  4. 如果要存储的数据是变长的,那就使用varchar类型进行存储,比如名字、地址等。
  5. varchar适用于存储可变长度的字符,当字符长度不确定或变化较大时,varchar可以更节省存储空间。

SQL语句如何优化

当涉及 SQL 语句优化时,我会着重关注查询性能,因为在实际应用中,查询性能经常是一个重要的优化点。

建立合适的索引:

确保数据库表上的列上有适当的索引。索引可以加速数据检索操作。

避免在大数据表上进行全表扫描。使用索引来限定数据范围。

谨慎使用通配符:

在WHERE子句中避免使用通配符(例如%),因为它们会导致全表扫描。如果确实需要使用通配符,尽量将它们放在搜索模式的末尾。

避免使用SELECT *:

仅选择需要的列,而不是使用SELECT *选择所有列。这减少了数据传输和内存消耗。

使用JOIN而不是子查询:

在合适的情况下,使用JOIN来关联表,而不是使用子查询。JOIN通常比子查询效率更高。

分页优化:

当需要分页查询大数据集时,使用LIMIT和OFFSET来限制返回的行数,而不是检索整个结果集。

使用合适的数据类型:

使用合适大小的数据类型来存储数据,避免使用过大或过小的数据类型。

SQL优化是一个复杂的领域,涉及多个方面,包括查询编写、数据库设计、索引设计和硬件配置等。根据具体的应用和数据库系统,优化方法可能会有所不同。

合理设计数据库结构:

数据库的设计和规范化也对性能有重要影响。合理的表结构和关系设计有助于避免性能问题。

说一下你理解的外键约束

举例来说,某一个字段是表b的主键,但是它也是表a中的字段,表a中该字段的使用范围取决于表b。外键约束主要是用来维护两个表的一致性

外键约束的作用是维护表与表之间的关系,确保数据的完整性和一致性。

让我们举一个简单的例子:

假设你有两个表,一个是学生表,另一个是课程表,这两个表之间有一个关系,即一个学生可以选修多门课程,而一门课程也可以被多个学生选修。在这种情况下,我们可以在学生表中定义一个指向课程表的外键,如下所示:

CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(50), course_id INT, FOREIGN KEY (course_id) REFERENCES courses(id) );

这里,students表中的course_id字段是一个外键,它指向courses表中的id字段。这个外键约束确保了每个学生所选的课程在courses表中都存在,从而维护了数据的完整性和一致性。

如果没有定义外键约束,那么就有可能出现学生选了不存在的课程或者删除了一个课程而忘记从学生表中删除选修该课程的学生的情况,这会破坏数据的完整性和一致性。

因此,使用外键约束可以帮助我们避免这些问题。

如何排查慢 sql

在慢SQL的优化过程中,可以从以下五个角度去进行思考优化:SQL优化、资源占用、业务改造、数据减少、源头替换

在治理慢查的过程中,SQL语句的使用问题是导致慢SQL的主要因素,因此本文主要从SQL优化角度出发,对慢SQL的常见原因和特征进行分析,介绍慢SQL的优化过程以及一些有效的调优技巧和工具,希望能够提供一些有用的方法和策略,帮助大家更好地应对慢SQL问题,并最终实现提升系统性能和优化用户体验的目标。

http://www.lryc.cn/news/177720.html

相关文章:

  • git管理常用命令
  • Python 逢七拍手小游戏2.0
  • 基于微信小程序的在线小说阅读系统,附数据库、教程
  • 216. 组合总和 III
  • 【Java】数组的深浅拷贝问题(二维数组举例)(136)
  • 【轮趣-科大讯飞】M260C 环形六麦测试 2 - ROS1功能测试与唤醒、语音识别程序解析
  • 油猴(篡改猴)学习记录
  • LeetCode 面试题 05.08. 绘制直线
  • 机器人中的数值优化|【六】线性共轭梯度法,牛顿共轭梯度法
  • FastestDet---原理介绍
  • ORACLE 在内存管理机制上的演变和进化
  • Linux ❀ 进程出现process information unavailable时的消除方法
  • ps智能填充功能平替:alpaca的安装和使用
  • 【前端打怪升级日志之ES6篇】玩转函数
  • 网址静态码手机制作教程,附图文详解!
  • 服务器性能测试监控平台export+prometheus(普罗米修斯)+grafana搭建
  • 【24种设计模式】责任链模式
  • C#异步委托的三种实现 BeginInvoke / EndInvoke / IsCompleted
  • 在HTTP请求中安全传输base64编码的字符串
  • 05预测识别-依托YOLO V8进行训练模型的识别——对视频中的图片进行识别
  • LeetCode算法题---第3天
  • 欧洲FBA专线海运与陆运的差别
  • UDS诊断
  • 计算材料学学习记录1
  • PHP8中的构造方法和析构方法-PHP8知识详解
  • 【GPU编程】Visual Studio创建基于GPU编程的项目
  • MySQL面试题-索引的基本原理及相关面试题
  • MySQL学习笔记19
  • 为什么u盘在mac上显示不出来
  • 【golang】调度系列之sysmon