背景 mysql分页查询是我们常见的需求,但是随着页数的增加查询性能会逐渐下降,尤其是到深度分页的情况。我们可以把分页分为两个步骤: 定位偏移量 获取分页条数的数据 所以当数据较大页数较深时就涉及一次需要耗费较长时间的操作。所以mysql深度分页的问题该如何解决呢? 首先我们来看一个简单的查询: SELECT * FROM events WHERE date > '2010-01-01T00:00:00-00:00' AND event = 'editstart' OR…
背景 mysql分页查询是我们常见的需求,但是随着页数的增加查询性能会逐渐下降,尤其是到深度分页的情况。我们可以把分页分为两个步骤: 定位偏移量 获取分页条数的数据 所以当数据较大页数较深时就涉及一次需要耗费较长时间的操作。所以mysql深度分页的问题该如何解决呢? 首先我们来看一个简单的查询: SELECT * FROM events WHERE date > '2010-01-01T00:00:00-00:00' AND event = 'editstart' OR…
如果你想破解一个已经连接好的数据库密码,可以参考这个方法。 邮件查看已经连接好的数据库属性是这样的 但是密码是******谁也看不懂,博主也从网站上下载过一些星星查看器之类的东西,都无济于事。 接下来就是尝试导出这些连接属性,选择文件---->导出连接,勾选想要导出的数据库,导出.ncx后缀的文件 打开导出后的文件,本以为就能看到数据库密码,没想到竟然加密了!!!! 没办法,Google it ,后来发现GitHub上一个大神写了一个PHP,可以直接破解这个密码,一切成功的开始。https://github.…
数据库事务的隔离级别有4种,由低到高分别是:Read uncommitted、Read committed、Repeatable read、Serializable。事物的并发操作中可能出现脏读,不可重复读,幻读。 数据库事务隔离级别: 未授权读取级别(读未提交): 也称为读未提交(Read Uncommitted)。 以操作同一行数据为前提,读事务允许其他读事务和写事务,未提交的写事务禁止其他写事务(但允许其他读事务)。 此隔离级别可以防止更新丢失,但不能防止脏读、不可重复读、幻读。 此隔离级别可以通过“排他写锁…
背景 MySQL版本:5.7.18 问题 假设字段category无索引且有重复值,order by category 和limit组合使用的结果会和预期不符。 场景复现 表结构(复现问题,两个字段足够了~) CREATE TABLE `ratings` ( `id` int(11) NOT NULL AUTO_INCREMENT, `category` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAUL…
本文主要总结下重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)的概念。 redo log 是物理日志,undo log 和 binlog 是逻辑日志 binlog二进制日志是server层的无论MySQL用什么引擎,都会有的,主要是左主从复制,时间点恢复使用 redo log重做日志是InnoDB存储引擎层的,用来保证事务安全 undo log回滚日志保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读 crash-saf…
有一个奇怪的问题,假如MySQL 的自增 ID 用完了,怎么办? 这个知识点比较冷门,不过可以自己手动实践下。 首先,创建一个最简单的表,只包含一个自增id,并插入一条数据。 create table t0(id int unsigned auto_increment primary key) ; insert into t0 values(null); 通过show命令show create table t0;查看表情况 CREATE TABLE t0 ( id int(10) unsigned NOT NULL…
SQL规范性检查 select检查 UDF用户自定义函数 SQL语句的select后面使用了自定义函数UDF,SQL返回多少行,那么UDF函数就会被调用多少次,这是非常影响性能的。 #getOrderNo是用户自定义一个函数用户来根据order_sn来获取订单编号 select id, payment_id, order_sn, getOrderNo(order_sn) from payment_transaction where status = 1 and create_time between '2020-1…
问题。然而在大量写入数据场景该如何优化呢? 今天这里主要给大家介绍,在有大量写入的场景,进行优化的方案。 总的来说MYSQL数据库写入性能主要受限于数据库自身的配置,以及操作系统的性能,磁盘IO的性能。主要的优化手段包括以下几点: 1、调整数据库参数 (1) innodb_flush_log_at_trx_commit 默认为1,这是数据库的事务提交设置参数,可选值如下: 0: 日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。 1:在每个事务提交时,日志缓冲被写到…
前提 Python3 代码实现 #!/usr/bin/env python3 # -*- coding: UTF-8 -*- import pymysql db = pymysql.connect(**db_conf) cursor = db.cursor() cursor.execute(sql) # 最后插入行的主键id print(cursor.lastrowid) # 最新插入行的主键id print(conn.insert_id()) conn.commit() 注意 使用 cursor.lastrowi…
Mysql 中数据是要落盘的,这点大家都知道。读写磁盘速度是很慢的,尤其和内存比起来更是没的说。但是,我们平时在执行 SQL 时,无论写操作还是读操作都能很快得到结果,并没有预想中的那么慢。 可能你会说我有索引啊,有索引当然快了。但是铁子,索引文件也是存储在磁盘上的,查找过程会产生磁盘 I/O。如果同时对某行数据进行多次操作,那岂不是要重复产生很多次磁盘 IO 吗? 可能你想到了,那我把数据存在内存里不就可以了吗?内存速度比磁盘快,这准没毛病。没错,那该怎么存呢? 这就是我们今天所要讲的主题——缓冲池(buffer…
天若有情天亦老,人间正道是沧桑。
COPYRIGHT © 2022 lifengdi.com. ALL RIGHTS RESERVED.
Theme Kratos Made By Seaton Jiang