- 博客(72)
- 收藏
- 关注
原创 MySQL root用户密码忘记怎么办(Reset root account password)
在使用MySQL数据库的的过程中,不可避免的会出现忘记密码的现象。普通用户的密码如果忘记,可以用更高权限的用户(例如root)进行重置。但是如果root用户的密码忘记了,由于root用户本身就是最高权限,那这个方法就行不通了。本文介绍2种在忘记root用户用户密码的情况下,如何进行重设。
2024-07-22 16:11:19
438
原创 Python 利用pandas处理CSV文件(DataFrame的基础用法)
pandas是一个第三方数据分析库,其集成了大量的数据分析工具,可以方便的处理和分析各类数据。
2024-07-09 16:25:58
1541
原创 MySQL limit子句用法及优化(Limit Clause Optimization)
在MySQL中,如果只想获取select查询结果的一部分,可以使用limit子句来限制返回记录的数量,limit在获取到满足条件的数据量时即会立刻终止SQL的执行。相比于返回所有数据然后丢弃一部分,执行效率会更高。
2024-06-19 17:24:18
951
原创 Python NumPy数组的创建方法
Numpy是Python中科学计算的基础包,其核心对象就是ndarray(n维数组)。利用数组可以快速执行逻辑,形状操作,统计和傅里叶变换等运算,其效率比Python原生的数组效率更高。因此使用Numpy的第一件事就是创建Numpy数组,本文总结了5种常用的创建NumPy数组方法。
2024-05-14 15:30:28
948
原创 Oracle 可传输表空间(Transportable Tablespace)
在数据归档、备份、测试等场景,我们经常需要将数据从一个系统移动到另一个系统,一个较常用的方案是数据的导出/导入(export/import),但是在数据量较大的场景,此方案可能比较耗时。而可传输表空间是一种以文件为单位的数据移动技术,它绕过了导出/导入的数据处理过程,直接利用操作系统复制底层数据文件来快速移动数据。
2024-04-19 17:29:33
1193
原创 MySQL Prepared语句(Prepared Statements)
在数据库应用中,很多SQL语句都会重复执行很多次,每次执行可能只是where条件中的变量值不同,但MySQL依然会解析SQL语法并生成执行计划。对于这类情况,可以利用prepared语句来避免重复解析SQL的开销。
2024-04-17 18:37:43
1406
原创 Python 进度显示工具(tqdm)
tqdm 是一个进度显示工具,当任务执行的等待时间较长时,通过tqdm模块可以模拟出一个进度条,由此可以看到任务执行进度,获得更好的体验。
2024-04-12 17:40:02
1348
原创 MySQL count(*/column)查询优化
count()是SQL中一个常用的聚合函数,其被用来统计记录的总数,下面通过几个示例来说明此类查询的注意事项及应用技巧。
2024-03-28 19:10:35
1164
原创 Python 垃圾回收和弱引用(Weakref)
Python中的赋值语句是建立变量名与对象的引用关系,多个变量可以引用同一个对象,当对象的引用数归零时,可能会被当作垃圾回收。而弱引用即可以引用对象,又不会阻止对象被当作垃圾回收,因此这个特性非常适合用在缓存场景,当对象被当作垃圾回收时,其缓存信息会同步清除。
2024-03-28 17:11:39
1111
原创 Oracle 写丢失保护/影子表空间(Lost Write Protection with Shadow Tablespace)
Oracle数据库在与独立I/O子系统交互时,假如Oracle发出的写磁盘命令,I/O子系统也返回成功写磁盘的消息(数据此时可能依然在I/O缓存中),如果在I/O系统实际写盘之前Oracle再次读取该数据,则I/O系统可能会返回旧版本的数据(写操作丢失了)。Oracle引入了写丢失保护机制,在读数据时校验数据块的版本,以检测是否出现写丢失。
2024-03-22 20:43:58
917
原创 MySQL 连接控制(Connection Control)
MySQL连接控制是一个安全插件,当客户端出现指定次数的连接失败时(密码错误),之后的每次连接请求的响应都会逐渐增加延迟,此插件可以帮助数据库抵御类似DDOS攻击或暴力破解密码。
2024-03-22 17:11:07
1570
原创 Oracle 临时表空间管理(Temporary Tablespace)
Oracle临时表空间(Temporary Tablespace)主要用来存储数据库运行中产生的临时对象,例如SQL排序结果集,临时表等,这些对象的生存周期只有会话。本文总结了Oralce中涉及临时表空间的管理和优化操作。
2024-03-17 05:19:20
2491
原创 Python 利用CSV模块处理数据
CSV(Comma-Separated Values 逗号分割值)是一种简单的数据存储与分享方式,和Excel相比,CSV文件的一个主要优点是有很多程序可以存储,转换和处理纯文本文件,因此应用场景更加广泛。
2024-03-17 05:05:49
1593
原创 MySQL 系统变量查看与设置(System Variables Configuration)
MySQL中有大量的系统变量控制服务器的行为,大部分的系统变量是不需要我们调整的,保持默认即可。但为了获得更高的性能和稳定性,有时需要适当对部分变量进行调整,本文总结了MySQL中系统变量的查看与设置方法。
2024-03-14 18:18:22
2072
原创 Python 闭包和nonlocal声明
闭包是针对嵌套函数环境的概念,它的作用是延伸函数的作用域。简单来说,闭包就是一个函数,但它可以保存着上层函数作用域中的变量,使得这些变量可以在函数中使用。而nonlocal声明的作用就是允许函数重新绑定局部作用域以外且非全局作用域当中的变量。
2024-03-14 17:47:18
876
原创 Linux 配置ssh、scp、sftp免密登录
SSH(Secure Shell)是一种安全的远程登录协议,它使用客户端-服务器架构促进2个系统之间的安全通信,并允许用户远程登录服务器。在某些高可用环境下,服务器之间可能还需要配置免密互信,即基于密钥验证登录。
2024-03-13 16:27:27
1860
原创 MySQL 专用服务器自动配置参数(innodb_dedicated_server)
MySQL8.0推出了专用数据库服务器自动配置参数,通过打开innodb_dedicated_server,数据库会自己完成缓冲池大小,重做日志,磁盘刷新方式等一系列配置,且配置还会根据服务器的配置升级自行调整。
2024-03-12 16:53:41
1202
原创 Oracle 层级查询(Hierarchical Queries)
如果一张表中的数据存在分级(即数据间存在父子关系),利用普通SQL语句显示数据间的层级关系非常复杂,可能需要多次连接才能完整的展示出完成的层级关系,更困难的是你可能不知道数据到底有多少层。而利用Oracle的层级查询,则可以很方便的显示出层级。
2024-03-11 20:00:09
1769
原创 Oracle 配置多个缓冲池(Keep pool & Recycle Pool)
默认情况下,Oracle只有一个缓冲池 - Buffer Cache,其可以满足基本数据缓存需求。但某些数据的访问模式可能与普通数据不同,对于访问非常频繁的数据和很少访问的数据(两种极端),Oracle可以支持配置两个独立的缓冲池来存放该类数据,特殊的缓冲池针对两种访问模式做了优化,以提升系统性能。
2024-03-08 17:47:00
1058
原创 Python 浅复制与深复制(Shallow Copy & Deep Copy)
在Python中,赋值语句的意义是在对象与变量之间建立引用关系,相当于给对象起了名字。对于复合类型对象,由于其可以保存其他类型对象的引用,而在复制时即引出了“仅复制引用关系”或“同时复制引用对象”两种选择,即浅复制和深复制。
2024-03-07 17:08:10
550
原创 MySQL 元数据锁及问题排查(Metadata Locks MDL)
"元数据"是用来描述数据对象定义的,而元数据锁(Metadata Lock MDL)即是加在这些定义上。通常我们认为非锁定一致性读(简单select)是不加锁的,这个是基于表内数据层面,其依然会对表的元数据加锁,保证读取数据期间表结构不会变更。
2024-03-05 14:54:09
1833
原创 MySQL 自增列解析(Auto_increment)
MySQL数据库为列提供了一种自增属性,当列被定义为自增时。Insert语句对该列即使不提供值,MySQL也会自动为该列生成递增的唯一标识,因此这个特性广泛用于主键的自动生成。
2024-02-29 20:54:02
3330
原创 Oracle 直接路径插入(Direct-Path Insert)
直接路径插入(Direct Path Insert)是Oracle一种数据加载提速技术,可以在使用insert语句或SQL*Loader工具大批量加载数据时使用。直接路径插入处理策略与普通insert语句完全不同,Oracle会通过牺牲空间,安全性,并发性能来换取加载速度。
2024-02-28 16:25:56
1258
原创 Oracle 基础表管理(Heap-Organized Table Management)
表是数据库中负责数据存储的对象,在RDBMS中,数据以行、列的形式存储在表中。Oracle中表有很多种类型,最基础且应用最常用的类型就是堆表(Heap-Organized Table),本文列举了Oracle堆表的常用管理操作。
2024-02-26 18:54:28
1117
原创 Python 字典及常见应用(Python Dctionary)
字典是python的内置基本数据类型之一,其他语言中可能会被称为“关联存储”或“关联数组”。它是一种映射关系,以包含在{}中的"键:值"对表示。字典是一种可变对象,键没有顺序。字典的主要用途是通过关键字存储、提取值。
2024-01-30 17:48:48
895
1
原创 MySQL 定位长事务(Identify Long Transactions)
在MySQL的运行中,经常会遇到一些长事务。长事务意味着长时间持有系统资源,这在OLAP系统中很常见,但在OLTP系统中,长事务意味着争用、并发降低,等待。
2024-01-24 17:38:12
1616
原创 MySQL JSON数据类型全解析(JSON datatype and functions)
JSON(JavaScript Object Notation)是一种常见的信息交换格式,其简单易读且非常适合程序处理。MySQL从5.7版本开始支持JSON数据类型,本文对MySQL中JSON数据类型的使用进行一个总结。
2024-01-23 15:14:31
2972
原创 Oracle merge into语句(merge into Statement)
在Oracle中,常规的DML语句只能完成单一功能,,例如insert/delete/update只能三选一,而merge into语句可以同时对一张表进行更新/插入/删除。
2023-12-05 20:32:41
4209
原创 Oracle 单表插入/多表插入(Single Table Insert/Multi-table Insert)
多表插入非常适合数据整理分配场景,如果利用单表插入,我们需要对每个条件查询一次源表并插入目标表,而多表插入可以直接定义多个条件,一次查询即可将所有数据分布到不同的表中。这里再建一张测试表income,用多表插入的方式将数据从wage加载到income,注意income的表结构与wage不同,它新增了type列来区分收入类型。在多表插入中,你必须通过子查询加载数据。数据库应用中,我们经常需要向表中插入数据,insert语句是最常用的数据插入方式,根据目标表的数量,可以分为单表插入和多表插入。
2023-11-30 18:50:39
3102
原创 MySQL中UUID主键的优化
在MySQL中,innodb是按照表的聚簇索引(主键)来组织数据存储的,也就是主键的顺序决定了数据存储的顺序。这也是为什么我们通常推荐用整型,自增的数字来作为表的主键,当新数据插入时,主键一定是最大的,只要放在叶子层中最后的数据页即可,对已有的数据不会有影响。可以看到uuid作为主键的长度是146,而数字做主键的长度为4,这意味着当数据量非常大的时候,UUID的索引会非常臃肿,查询性能会很低。
2023-11-10 16:45:07
2045
原创 MySQL模糊查询/模式匹配(Pattern Match)
在'pattern'中,可以使用'_'来匹配单个字符或'%'来匹配任意字符串(包含空字符,但不会匹配null)。like 匹配的方式可以完成一些简单的模糊查询,例如你可以用%abc%来匹配任意包含abc的数据,但是如果问题换成:包含a或b或c,那么你就要写3次匹配,如果问题更复杂一点(例如匹配特定次数),like可能就无法完成了,此时你就需要采用正则表达式匹配。需要注意的一点是,如果匹配的字段上有索引,如果遇到'%str'这种将%放在模式开头,那么将会导致索引失效,使用中需要斟酌一下性能。
2023-11-09 19:28:40
5288
原创 Oracle物化视图(Materialized View)
物化视图主要用在OLAP环境,可以提前运行大量运算并保存结果,为后续查询加速。1.1物化视图应用场景为什么要使用物化视图?假设一个场景,用户每天都需要分析销售数据,而每天产生的数据量都非常庞大,在原始数据上直接运行查询SQL(例如进行sum,avg的操作),速度会非常缓慢。传统的查询优化手段,例如索引、分区、并行执行等,在这种场景下都无法将速度提升到一个可接受的范围。对于这种问题,传统的解决方案是建立一张中间表,提前运行查询SQL并将结果保存下来,当用户查询的时候直接查询结果表。
2023-09-27 16:13:22
6630
原创 MySQL 用户账号管理(Accounts Management)
MySQL的账号由User和Host两部分组成,其格式为'User'@'Host',其中Host部分限制了用户可以登录的地址。在登录的时候,MySQL需要对我们的账号进行验证,这个验证的操作是由专门的认证插件来完成的。角色(role)是权限的集合,你可以将权限赋给角色,然后将角色赋给账号,这会方便权限的集中管理,如果涉及通用权限调整,只需要调整角色的权限即可,部分用户如果需要特别的权限,可以单独赋予。
2023-09-15 17:32:46
1060
1
原创 MySQL InnoDB死锁原因及改善建议(InnoDB Deadlocks)
死锁是事务型数据库中一种现象,为了在高并发环境下不出错,数据库引入了"锁"这一数据结构来控制资源的并发访问,但也会导致死锁。
2023-07-28 18:01:07
3059
原创 MySQL多版本并发控制原理(MVCC)
由于大部分数据库都是高并行发的,即允许多个事务同时对数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。不同的隔离级别代表了数据库在性能和可靠性之间的取舍。那么MySQL是如何保证事务基本特性ACID中的I(Isolation 隔离性)?答案就是InnoDB的多版本并发控制(Multi-Version Concurrency Control MVCC)。
2023-07-21 12:30:08
245
原创 Oracle 普通视图 (Oracle Standard Views)
视图(views)是一种基于表的"逻辑抽象"对象,由于它是从表衍生出来的,因此和表有许多相同点,我们可以和对待表一样对其进行查询/更新操作。但视图本身并不存储数据,也不分配存储空间。 本文只讨论普通的视图(Standard Views)。Oracle的视图类型还有对象视图(Object Views)物化视图(Materiallized Views)和分析视图(Analytic Views)等。目录一、视图的作用二、视图创建语法三、基础视图3.1 基础视图创建3.2 自定义视图列名3.3 强行建立视图3
2023-07-19 18:45:26
998
原创 Oracle 隐形列(Oracle Invisible Columns)
a int,b int invisible, -- 建表时定义隐形列c int);-- 将已有列转换为隐形列-- 显示指定列名-- 显示指定列名通过alter table 的modify …-- 将隐形列转变为正常列三、隐形列对列排序的影响表中的列是有排序的,例如我们在使用select *查询时,列的显示顺序就是建表时列的定义顺序。但是隐形列是不参与表中列的排序的,如果某列由隐形变为显形,那么总是会附加到表的最后,因此隐形列会导致表中列排序的变化,这点需要注意。
2023-07-03 18:44:26
1412
原创 Oracle并行执行(Oracle Parallel Execution)
在会话级别开启并行度后,可以通过v$session表中的pdml_status,pddl_status, pq_status来查看DML,DDL, QUERY 的会话并行状态,可能的状态有disabled/enabled/forced。使用force选项时,会强制后续语句使用并行执行,并且用指定的并行度覆盖默认并行度。如果你不知道并行度该设置为多少,可以不指定并行度,这样Oracle会自动决定并行度,例如上面的语句中,我们去掉parallel后的数字,oracle将自行决定并行度。
2023-06-20 18:12:57
5958
原创 Oracle的“自增列“(身份列 Identity Columns)
当指定身份列时,系统会隐式为其创建一个序列生成器(Sequence Generator SG),这个序列生成器为身份列提供值。从12c开始,Oracle提供了身份列(Identity Column)特性,在创建表时可以实现类似MySQL中的自增(auto_increment),从而为每一行数字自动生成ID值(身份)。观察上面的插入的数据,可以看到用户指定的值是可以与序列生成器的值重复的,因此。,它会与表中已有的数据生成相同的值,同时用户也可以再次插入已存在的值。示例:创建身份列时显式指定属性。
2023-06-06 16:53:07
5653
目录同步工具,可以同步文件夹内容,适合简单备份场景
2024-07-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人