mysql 记录一次线上sql优化 sql select 'false' as QUERYID, id, uid, order_id, start_position, end_position, reply_order_price, finish_order_price, member_level, scene_id, member_score_type, member_score, rob_result_time, record_type,
mysql mysql timestamp类型使用问题 表 CREATE TABLE `hy_goods_config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '类型 0-goods 1-sku', `obj_code` varchar(64) NOT NULL
mysql mysql分区与分表 对区对于引擎来说,是多个表,但是对于server层来说是1个表 可以通过多维度进行分区,如范围分区、hash分区、list分区 分区表与用户分表相比,有两个问题 分区表在第一次访问时,需要访问所有的分区 分区表共用mdl锁
mysql mysql之自增id 自增id值的存储方式 innodb在5.8版本前是不对该值进行存储的,只是放在内存中,如果实例重启,则查询表的最大值+1,重新放在内存中。 在5.8以后会将自增值的变更记录在redo log中,重启后依靠redolog恢复重启前值。 自增id修改时机 当执行insert操作时,如果未指定id,或id为0,则会取自增id并将自增值+1;如果指定了id,则会计算指定的id与自增值的大小,如果小的话不会对自增值进行操作,如果大于自增值,则会将自增值修改为该id+1 严格来说并非+1,而是+auto_increment_increment的值 自增锁的范围 在5.1.
mysql mysql 之 auto increment 下一次自增id可通过show create table table1查看,另外可通过以下系统参数设置递增数值 show variables like '%auto_inc%'; auto_increment_increment 2 auto_increment_offset 1 auto_increment_offset 和 auto_increment_increment是两个系统参数,分别用来表示自增的初始值和步长,默认值都是1。 备注:在一些场景下,使用的就不全是默认值。比如,
mysql mysql Communications link failure 原因 mysql连接错误 复现 启动服务 请求接口,调用mysql获取数据 stop mysql 请求接口报错 启动mysql 请求接口,未自动恢复,仍报错Communications link failure 解决方案 使用DruidDataSource使用com.mysql.jdbc.Driver 当创建失败时,会通过com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread循环创建连接,间隔时间为timeBetweenConnectErrorMillis直到获取到正常的连接 使用DruidDataSource使用com.p6spy.engine.spy.P6SpyDriver
mysql mysql查看当前运行的程序 命令 show processlist:根据不同的账号权限可以看到所有用户的,当前用户的对应的连接。只有100条 show full processlist:展示所有的连接数据 sql select id, db, user, host, command, time, state, info from information_schema.processlist where command != 'Sleep' and db='lts' order by time
mysql mysql数据结构之b+树 b树 b树(balance tree)和b+树应用在数据库索引,可以认为是m叉的多路平衡查找树,但是从理论上讲,二叉树查找速度和比较次数都是最小的,为什么不用二叉树呢? 因为我们要考虑磁盘IO的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。 所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是b树的特征之一,它的每个节点最多包含m个孩子,m称为b树的阶,m的大小取决于磁盘页的大小。 b树特征 一个M阶的b树具有如下几个特征: 定义任意非叶子结点最多只有M个儿子,且M>2; 根结点的儿子数为[
mysql mysql 获取全部表名 获取库db1的全部表名 select table_name from information_schema.TABLES where TABLE_SCHEMA='db1' and TABLE_TYPE = 'base table'; 获取path_names_png字段,截去最后一个‘-’及以后的部分 SELECT path_names_png, LEFT(path_names_png, char_length(
mysql 记录一次签到表分表的过程 建表 create table sign_{0,9}{ xxx } 定制策略 创建ModShardingStrategy 实现 AbstractShardingStrategy 修改mapper mapper 添加注解 @TableSharding(tableName = "activity_xxx", shardBy = "uid",strategy = "com.xxx.ModShardingStrategy") 添加拦截器 @Bean("
mysql mysql通过MapperScan实现多数据源 MapperScan org.mybatis.spring.annotation.MapperScan 在SpringBoot中集成MyBatis,可以在mapper接口上添加@Mapper注解,将mapper注入到Spring,但是如果每一给mapper都添加@mapper注解会很麻烦,这时可以使用@MapperScan注解来扫描包。 @MapperScan注解只会扫描包中的接口,不会扫描类,所以可以在包中写Provider类。 属性 basePackages @MapperScan("com.demo.mapper"):扫描指定包中的接口 @MapperScan("com.demo..mapper"):一个代表任意字符串,
mysql mysql中tinyint、smallint、int、bigint的区别 tinyint 从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据。存储大小为 1 个字节。 unsigned 是从 0 到 255 的整型数据。 所以建表的时候 只能是tinyint(3),哪怕你建tinyint(100),他最大还是3位这么多。 smallint 从 -2^15 (-32,768)
mysql mysql group_concat长度限制 问题描述 1. SELECT GROUP_CONCAT(字段名) FROM 表 WHERE a='值'; 2. SELECT count(字段名) FROM 表 WHERE a='值'; 语句1的结果集小于语句2的数量 问题原因 mysql对group_concat的长度做了限制 解决方案 改变当前会话默认查询长度 1. SET SESSION group_concat_max_len
mysql mysql幻读 在可重复读下,mvcc是否解决了幻读问题 测试一 事务1 set autocommit = 0; select * from temp; 事务2 insert into temp (id,name)values(2,"60") 事务1 select * from temp; 总结 在可重复读模式下,查询不到新提交的insert语句 测试二 事务1 set autocommit = 0;
mysql mysql之binlog操作 获取binlog文件列表 show binary logs; 查看当前正在写入的binlog文件 show master status 查看指定binlog文件的内容 show binlog events in 'mysql-bin.000002'; 查看binlog具体内容 mysqlbinlog -u temp_admin -h psi.mysql.test.tcit.cc -P 3306 --read-from-remote-server -p --base64-output="decode-rows&
mysql mysql explain详解 简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. 准备 user_info CREATE TABLE `user_info` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL DEFAULT '',
mysql mysql 关键字 union MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。 sql准备 CREATE TABLE `user_info` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL DEFAULT '', `age` INT(11) DEFAULT NULL,
mysql mysql行锁分析一 mysql锁的原则 原则 1:加锁的基本单位是 next-key lock。next-key lock 是前开后闭区间。 原则 2:查找过程中访问到的对象才会加锁。 2.1: 若字段上无索引,因要根据id查询所有的数据,所以所有数据均会加上next-key lock 2.2: 若字段上有普通索引,则只有访问到的数据添加next-key lock,但是最后一条由于不满足,所以根据优化2,退化为间隙锁 优化 1:索引上的等值查询,给唯一索引加锁的时候,next-key lock 退化为行锁。
mysql 数据库事务的四大特性 四大特性 原子性(Atomicity):原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚 一致性(Consistency):一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 隔离性(Isolation):隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。 持久性(Durability):持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
mysql mysql之慢日志 查询mysql慢日志是否开启 show variables like '%slow_query_log%'; 开启mysql慢日志 set global slow_query_log=1; 使用set global slow_query_log=1开启了慢查询日志只对当前数据库生效,MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此) 查看及设置慢日志记录时间 查看慢日志记录时间 show variables like 'long_