MySQL基础知识总结

MySQL基础知识大总结 select * from student where name like '%七';| 5 | 钱七 | 78.0 | NULL | 97.0 | 阅读详情

MySQL语句执行流程图:

mysql

Myisam和Innodb的区别

1、innodb支持事务,锁级别是行级锁,支持四个事务隔离级别,分别是未提交读、提交读、可重复读、串行化

2、innodb的索引策略是聚簇索引

3、innodb使用MVCC实现并发控制、也就是多版本并发控制,同时也支持索引间隙锁

4、innodb支持热备份

5、myisam支持全文索引、表压缩

6、myisam的锁不支持行级锁,支持表级锁,这个特性会导致,在并发高的情况下进行读写操作的时候性能很差。

7、myisam支持延迟更新索引键

8、myisam崩溃的概率比innodb要大很多,MySQL的数据恢复相较于innodb较差

9、数据存储方式不一样,innodb采用聚簇索引的方式存储数据,myisam采用索引和列的值分离的方式存储数据。

MySQL优化相关

慢查询日志,对优化MySQL查询至关重要。可以通过 long_query_time 参数来设置日志记录行为,当值为0时,记录所有的查询

使用 show global status SQL语句查看当前连接数(threads_connected)、查询线程数(threads_running)、查询数(queries)

使用 show processlist SQL语句查看当前连接线程是否有废线程,比如locked、free 状态的

设计表的时候选择合适的数据类型,尽量使用NOT NULL,列不要太多

主键最好使用整数类型,避免使用字符串类型

查询SQL数据表关联不要过多,一般最多12个表

根据实际业务创建相关汇总表和缓存表

使用索引。

alter table 操作在大多数情况下都会锁表,并且重建整表,慎用

对于引擎是myisam的数据表在迁移或转入大量数据的时候,可以先关闭索引,等待数据载入之后开启索引,相关操作如下

-- 关闭索引

alter table table_name disable keys;

-- 载入数据



-- 开启索引

alter table table_name enable keys;

这个方法对主键、唯一索引无效

索引相关

大多数MySQL存储引擎都实现了b-tree索引,b-tree索引是有序的,在 order by 和 group by语句中也会用到索引

1、索引总是遵循最左前缀

2、索引中的列不能被跳过,如果一个查询中有范围查询,那么只能用到范围查询之前的列,右边的用不到。

3、可以通过伪哈希索引的手段来优化查询语句

4、查询中的条件的列不能是一个表达式或函数的参数,要是单独的列,这样才能用到索引

5、索引中列的顺序不同效果也不一样,在实际业务中可以通过使用相同的列不同的顺序来创建更多的索引

6、索引可以减少服务器扫描的数据量,避免排序和临时表,索引可以将随机I/O变为顺序I/O

前缀索引

前缀索引主要是对字符串类型的列取公共前缀进行索引。可以通过不断比较公共前缀出现的次数和总记录的商来取前缀,方法如下:

假设表名为testcity,字符串列名为’city’,可以通过如下语句来计算

select count(distinct left(city,3)) /count(*) as sel from testcity;

sel的值越接近1越好。

下面添加一个前缀索引

alter table testcity add key(city(3));

前缀索引更小,更快,不过在order by 和group by中无法使用。

当使用explain分析查询语句时,如果索引类型为index_merge则说明表的索引策略很糟糕,要优化了

多列索引

选择合适的索引顺序至关重要。我们同样可以使用前缀索引中的方法来比较,不过这次我们不是比较前缀出现的次数而是整个列的记录不重复的次数:

表:testcity 列:cityid, xianid。

select count(distinct cityid) /count(*) as c, count(distinct xianid) /count(*) as x from testcity;

计算的结果中值越接近1的就越往前,比如 c>x,那么索引应该这样加

alter table testcity add key(cityid, xianid);

如果一个索引包含所有要查询字段的值,那这个索引就被称之为覆盖索引。比如下面这个语句:

select cityid from testcity where cityid = 10;

其中 idx_cityid_xianid就是cityid的覆盖索引

select cityid,id, xianid from testcity where cityid = 10;这个时候idx_cityid_xianid就不是覆盖索引

聚簇索引是一种数据存储方式,innodb存储引擎支持,主要是通过主键来实现,如果表中没有定义主键,那就会喧杂一个唯一的非空索引替代,如果没有符合条件的,会自行创建一个隐式主键。它将索引和列的值存储在一起。使数据访问更快,但是特消耗存储空间,二级索引访问需要两次查找,而不是一次(首先二级索引先找到主键,然后通过主键找到具体的值,两次索引查找)
在设计innodb主键的时候,建议使用单调顺序自增类型,比如自增ID,因为innodb是顺序插入的。
myisam和innodb的索引总结。
两者都支持,主键索引、唯一索引、单列、多列索引及前缀索引,不同的是两者实现的存储方式不一样,innodb中使用聚簇索引的方式存储数据,也就是把索引和列的值存在一起,myisam却不同,索引和值分离;:因为myisam的索引和数据是分开存储存储的,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因 ;innodb的数据和索引放在一起,当找到索引也就找到了数据。

查询优化相关
  • 减少不必要列的查询

  • 尽量优化查询,使之可以使用到覆盖索引

  • 建立合适的索引,减少查询时扫描的行数

  • 拆分复杂的查询,分解关联查询,简单的查询可以减少锁的竞争,易缓存,减少冗余记录查询

  • 在select查询中加上limit关键字,可以减少资源占用

  • 子查询尽量少用,合理使用子查询,可以使用表连接代替(MySQL版本5.6及以上可以放心大胆的去用子查询)

读锁又被称为共享锁,写锁被称为排它锁。
ACID指:原子性、一致性、隔离性、持久性

MySQL高级特性

分区

range 分区
CREATE TABLE `request_log` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `ip` int(11) NOT NULL,

  `uri` varchar(30) DEFAULT NULL,

  `request_time` int(11) NOT NULL,

  PRIMARY KEY (`id`,`request_time`),

  UNIQUE KEY `ip` (`ip`,`request_time`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 partition BY RANGE (request_time)

(partition p0 VALUES LESS THAN (1400000000) ENGINE = InnoDB,

 partition p1 VALUES LESS THAN (1500000000) ENGINE = InnoDB,

 PARTITION pall VALUES LESS THAN MAXVALUE ENGINE = InnoDB);

同时还有别的分区,比如,list分区,hash分区,key分区。具体可以参考:https://www.cnblogs.com/mliudong/p/3625522.html 简单了解下

  • 分区的时候最好不要选择默认为NULL的列,选择的列最好有索引(分区列和索引列匹配),分区在查询的时候需要锁住所有的底层表,这会带来很多的开销,要控制合适的分区的个数。分区的维护成本比较高

  • 在进行分区查询的时候,where条件要包含分区列,分区列不能在表达式中,这样可以在查询的时候减少分区的扫描。

    比如:partitions select * from request_log where request_time between 1400000000 and 1500000000;

视图

具体视图相关可以参考:https://blog.youkuaiyun.com/moxigandashu/article/details/63254901

全文索引

MySQL5.6版本innodb开始支持全文索引,之前的版本只有myisam支持,具体可以参考:https://www.cnblogs.com/PaulMa/p/5238682.html

绑定变量

以二进制的方式向服务端发送参数和句柄,节约内存和网络开销。服务器也只对器进行一次解析。
相对安全,减少了SQL注入和攻击

在高并发的情况下建议关闭查询缓存,如果非要使用的话不要设置太大的内存占用,相关参数:query_cache_type是否开启缓存;query_cache_size查询缓存的总内存空间,单位字节。

配置优化:

对于innodb来说最重要的两个配置为:

  • innodb_buffer_pool_size缓冲池大小

  • innodb_log_file_size 日志文件大小

基本配置
  • slow_query_log 慢查询是否开启

  • long_query_time 慢查询衡量标准,单位秒

  • max-connections 最大连接数

  • read-only 是否只读

  • table_cache_size

  • sql_mode 服务器模式

复制

二进制日志(binlog)建议指定确切路径和文件名,同时在备库上也建议指定中继日志(relay_log)的路径和文件名

相关参数:

主库:

log_bin = /var/lib/mysql/mysql-bin

备库:

relay_log = /var/lib/mysql/relay-bin

复制模式,两种,基于语句(statement),基于行(row)。

  • 基于语句消耗资源少,执行速度快,但是很多情况下无法正确复制数据。比如有存储过程的语句,语句里有变量的

  • 基于行的复制,顾名思义就是一行一行复制,但是在数据更改比较大的情况下,消耗资源多,复制慢。

  • 一般都是在实际应用中采用混合模式复制(mixed),即基于行和基于语句一起使用,5.7.7之前默认是基于语句,之后基于行,可以通过参数设置:

binlog_format = mixed|row|statement

参考文章:https://www.cnblogs.com/ivictor/p/5764978.html

主从复制开启步骤

1、在主服务器上创建一个复制账号

2、主库从库配置server_id选项,一般是机器IP32位的后八位,主库配置二进制文件地址,从库配置中继日志文件地址,可以通过show master status 查看binlog日志的名字

3、从库启动复制:

命令:

change master to master_host='hostip',master_user='masteruser',master_password='password',master_log_file='binlogname',master_log_pos=0; 

master_log_pos设置为0表示从日志开头读起,配置好之后,开始执行命令start slave;

sphinx全文索引

主索引和增量索引都要定时维护。具体相关实现可以参考:bbc,相关知识点,搞清楚文档、属性、关联字段。
相关参考文章:
https://blog.youkuaiyun.com/soar_away/article/details/52035072
https://blog.youkuaiyun.com/adparking/article/details/7080278
手册地址:http://sphinxsearch.com/docs/

原文地址:https://www.xiaodingchen.cn/2018/08/28/mysql-2018/

mysql 基础知识大全 mysql数据库基础知识 阅读详情

相关推荐

mysql练习题基础知识篇

A. 编译B. 保存C. 解释D. 编写正确答案:A正确答案:(1) 参照完整性;我的答案:2.8分正确答案:答案解析:无我的答案:4.8分正确答案:DEFAULT正确答案:正确答案:DEFAULT。

ambious909的博客 1738

MySQL学习笔记

我们经常用到的简单MySQL语句,做一个总结,对于没有基础的同学也有帮助,对于有基础的同学可以参考作为借鉴 1.连接数据库语句 : mysql -h 服务器主机地址 -u 用户名 -p 用户密码。注意 : -p后面不能加空格,否则会被当做密码的内容,导致登录失败 ! 2.数据库操作命令 update user set password=password('123456')where user='root'; 修改密码 flush privileges; 刷新数据库 show databases; 显示所有数

aaa123_456aaa的博客 3125

Sobel原理及计算过程详解

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。首先,我们需要构建一个Sobel算子,通常是一个 3x3 的矩阵。Sobel算子可以分别计算水平和垂直方向的梯度值,然后将两者合并得到总梯度值。索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度近似值。所以,我们假设选择图像矩阵中的点A(1, 1),即第二行第二列的元素,对应的。接下来,我们将使用Sobel算子计算这个点的梯度值。

2301_76461741的博客 1万+

MySQL基础大全(看这一篇足够!!!)

自己看MySQL的总结,一方面加深自己的记忆,一方面与君共享

weixin_35856285的博客 2万+

Yolov2 训练时anchor是如何使用的?build_target

0.简略描述 1.将真值检测框变换到特征图尺度上 2.计算以特征图每个网格中心为中心点时所有锚框与真值检测框的交并比 3.取与真值检测框交并比最大的锚框的id,及真值检测框中心所在cell的id,有此,可将真值检测框与预测结果对应起来 4.计算位置回归损失,置信度损失,分类损失 1,网络的输出 图1 yolov2 网络对于检测框位置大小的输出是: 对于1个batch网络的输出的shape为[batch_size, H*W*num_anchors, 5+num_classes], 其中: num_

机器人视觉感知 2818

B-Tree数据存储

SQLITE数据存储1. B-Tree的优势  在SQLite中数据库、表、索引都是通过B-Tree和B+Tree的形式进行存储的。如果采用传统的二叉树查找树、红黑树的查找深度一般为log2(N) \log{_2}(N)(其中N表示的是整个树的关键字的数目),在数据库中如果存储的资源过多,就会导致查找一个数据过程中出现较多的磁盘I/O操作,而过多的磁盘操作就会导致整个查找的效率较低,而基于二叉树的一

Promiscuous_youth的博客 1141

MySQL基础

一、MySQL概述 1、什么是数据库 ?  答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?  答:他们均是一个软件,都有两个主要的功能: a. 将数据保存到文件或内存 b. 接收特定的命令,然后对文件进行相应的操作 3、什么是SQL ? 答:MySQL等软件可以接受命令,并做出相应的操作,由于命令中可以包含删除文件、获取文件内容等众多操作,对于编写的命令就...

huang714的专栏 964

SECS/GEM协议学习教程

摘要:SECS/GEM是半导体制造设备通信的国际标准,定义了主机系统与设备间的通信规范,包括设备控制、状态监控、数据采集等功能。协议采用分层架构(应用层、消息层、传输层、物理层),支持关键消息类型如S1F13(建立通信)、S2F13(数据采集)等。通信流程涵盖建立连接、数据交换和终止会话,并通过状态变量(SVID)、事件(CEID)等实现实时交互。典型应用包括设备初始化、报警处理及配方管理,需处理数据类型(如U2、A、L)和通信调试问题。

GitHub个人仓库地址:https://github.com/feiyuluoye ; 个人塔罗牌占卜平台:http://118.126.82.12:8080/ ; 欢迎广大Coding友共同交流讨论。 2063

MySQL——基础知识总结超详细版本(一)

1、数据库概述以及常见概念的理解 存储数据用文件就可以了,为什么还要弄个数据库? 文件保存数据有以下几个缺点: 文件的安全性问题 文件不利于数据查询和管理 文件不利于存储海量数据 文件在程序中控制不方便 内存中的数据:断电后不保留 硬盘中的数据:持久化后的数据 需求出现:开发使用软件程序时,需要进行硬盘数据的管理 前提:硬盘中数据的管理要比内存中数据的管理复杂 导致:如果让程序员们完全自由地管理硬盘中的数据变得困难 所以:数据库管理软件就诞生了,由这些软件进行科学地、高效地管理硬盘中

weixin_45699237的博客 5658

香橙派OPi 6系列选型指南:RK3588与RK3588S开发板深度对比

开发板选型是嵌入式系统设计的关键环节,尤其在边缘计算和AI推理等场景中,芯片的差异直接影响硬件架构。瑞芯微RK3588及其精简版RK3588S是当前高端开发板的核心方案,两者在PCIe通道、显示输出和SATA支持上存在显著区别。理解这些原理,有助于工程师根据项目需求快速匹配产品。香橙派OPi 6系列基于这两款芯片,衍生出OPi 6、OPi 6 Pro与OPi 6 Max三种形态:紧凑型适合嵌入式门禁与AI盒子,Pro版凭借双屏异显和PCIe 3.0满足收银机与视频分析,Max的双2.5G网口和大内存则面向轻

weixin_29185167的博客 228

TPAMI 2025 | 从缺失碎片到杰作:基于上下文自适应扩散的图像修复

图像修复是一项具有挑战性的任务,尤其是要确保生成的内容与图像的现有部分无缝融合。尽管最近的扩散模型展现出了潜力,但它们在保持已知区域和未知(缺失)区域之间的连贯性方面常常遇到困难。这个问题源于扩散过程中缺乏明确的空间和语义对齐,导致生成的内容无法与原始图像平滑融合。此外,扩散模型通常依赖全局学习分布,而非局部特征,这使得生成的图像部分与现有图像部分之间存在不一致。在这项工作中,作者提出了ConFill,这是一个新颖的框架,引入了上下文自适应差异(CAD)模型,以确保在整个扩散过程中,已知区域和未知区域的中间

小白学视觉 240

MySQL数据库基础知识,基础操作详细整理

1. 数据库概念介绍,应用场景 2. 关系型数据库Mysql a) 数据库的组成部分介绍(服务器、数据库、表、行和列) b) Mysql数据库安装、navicat数据库安装与基本使用 c) mysql数据类型 d) 数据库级别操作(查看现有数据库、建库、删库、切换数据库等) e) 表级别操作(建表、删表、清空表格、增加删除字段等) f) 约束(非空、主键、外键、唯一键等约束、自增字段) g) 增加数据:insert 语句 h) 查找数据:select语句 i) 条件:where子句、逻辑运算符等

GCTTTTTT的博客 1万+

深入解析:武汉光庭信息技术 Android CarPlay 开发岗位的技术要求与面试准备(大连)

武汉光庭信息大连分部招聘Android CarPlay开发工程师,要求专科以上学历及2年以上Android开发经验,需精通CarPlay集成技术与车载系统开发。该职位涉及Android底层框架修改、CarPlay协议实现及车规级系统开发,需处理USB/HID驱动、图形合成等技术难点,并确保通过Apple严格认证。求职者需具备扎实的Android开发能力,熟悉车载环境特殊性,包括系统稳定性保障、人机交互适配等技术要点。文章深度解析了职位技术内涵,并提供面试问题与参考答案,帮助求职者全面准备这一复合型技术岗位。

郑伟强dev的专栏 401

mysql所有基础知识_MySQL基础知识(全)

1、概述目前属于Oracle,分成社区版和企业版,关系型数据库。1.1 目录结构bin:存储可执行文件data:存储数据文件doc:文档include:存储包含头文件lib:存储库文件share:错误消息和字符集配置文件:my.ini1.2 启动和停止在win cmd中使用net start/stop mysql来启动和停止mysql服务1.3 登入和登出1.3.1 登入mysql -uuer_n...

weixin_35964787的博客 1283

Oracle11g下载与安装(windows)

一、Oracle11g下载 二、安装准备 三、执行安装步骤 四、测试连接 附:Oracle11g服务说明

欢迎订阅我的“JAVA全栈开发笔记(全)”专栏,价格优惠,仅需19.9元。 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【MySQL】基础知识

本文详细讲解了 数据库的 客户端-服务器结构,数据库的存储空间、存储体系、存储特点,数据库的字符集编码方式,数据库的数据类型

Brookty的博客 3063

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[MYSQL数据库]--mysql的基础知识

理解什么是数据库,数据库的基本操作增删查改。

分享技术 2905

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MySQL基础知识

数据库是一个存储数据的集合,可以被多个应用程序共享和访问。数据库通常由一个或多个表组成,每个表包含一组相关的数据。创建数据库创建表...修改表删除表MySQL 是一种功能强大的关系型数据库管理系统,掌握 MySQL 的基础知识对于开发数据库应用程序非常重要。本文介绍了数据库的概念、MySQL 的安装和配置、SQL 语言的基本语法等内容,希望对读者有所帮助。

wu73guang5jian的博客 941

mysql的基础知识

从今天开始学习sql的基础知识,运用的是mysql工具来学习sql的相关基础知识。 sql是用于访问和处理数据库的标准的计算机语言。在学习Java的过程中,这是需要学习的基础知识。 sql能够对数据库实现增删改查的功能,这对学习Javaweb有帮助。现在开始学习mysql。 1.mysql的相关的概念介绍 mysql(Relational Database Management Syste

fushexiaozi的博客 487

MySQL_基础知识

1、MySQL 是一个客户端-服务器结构的程序。2、int : 整型;decimal (M,D) : 浮点型类型;varchar(size) : 字符串类型;datetime : 日期类型。3、需要操作数据库的表之前,需要先使用该数据库。4、使用数据库:use 数据库名;查看表结构:desc 表名。

m0_73620971的博客 1025

MySQL之安装与基础知识

数据库安装及基础知识

Miwll的博客 1433

Mysql基础知识

文章目录1.数据库基础知识1.1数据库三大范式1.2mysql有关权限的表1.3MySQL的binlog的三种录入格式2.数据类型3.引擎3.1MyISAM引擎与InnoDB引擎区别3.2InnoDB引擎的4大特性3.3存储引擎选择4.事务4.1什么是数据库事务?4.2事务的四大特性4.3事务的隔离级别5.锁5.1隔离级别与锁的关系5.2锁的类别5.3MySQL中InnoDB引擎的行锁的实现5.4InnoDB存储引擎的锁的算法有三种5.5怎么解决死锁5.5怎么解决死锁 1.数据库基础知识 1.1数据库三大范

Black_Me的博客 252

完整版MySQL基础知识梳理

MySQL是一个开源的关系型数据库管理系统,使用SQL语言来存储和管理数据。数据以表格形式存储,每个表由列和行组成,支持主键和外键来确保数据的唯一性和关联性。MySQL支持事务、索引等特性,广泛应用于Web和企业级应用中,提供高效的数据查询和多种存储引擎。(1)数据定义(DDL):用于定义数据库结构(如创建、修改、删除表)。[数据库的操作](2)数据定义(DDL):用于定义表结构(如创建、修改、删除表)。[表操作](3)数据类型:包括三个部分,数据类型、字符型类型和日期类型数据类型分类类型大小。

weixin_57198767的博客 1289

mysql基础知识汇总

mysql数据库知识点汇总整理

2301_76144723的博客 1327

【MySQL】MySQL基础知识复习(上)

本篇博客将复习MySQL的基础知识,及着重复习CRUD(增删查改)操作。目录一.MySQL数据库基础知识1.数据库操作1.1显示当前的数据库1.2 创建数据库1.3 使用数据库1.4 删除数据库2.数据类型2.1.数字类型2.2字符串类型2.3日期类型3.数据库表操作3.1查看表3.2创建表3.3查看表结构3.4删除表二.CRUD(重点)1.新增(Create)2.查询(Retrieve)2.1全列查询2.2指定列查询2.3查询字段为表达式2.4别名2.5去重查询:DISTINCT。

yc_xym的博客 1737
上一篇: PHP面试总结 v2018.08.24
下一篇: Golang中interface类型转string类型
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值