InnoDB

MySQL not updating information_schema, unless I manually run ANALYZE TABLE `myTable`

走远了吗. 提交于 2020-08-27 21:53:29
问题 I have the need to get last id (primary key) of a table (InnoDB), and to do so I perform the following query: SELECT (SELECT `AUTO_INCREMENT` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = 'mySchema' AND `TABLE_NAME` = 'myTable') - 1; which returns the wrong AUTO_INCREMENT. The problem is the TABLES table of information_schema is not updated with the current value, unless I run the following query: ANALYZE TABLE `myTable`; Why doesn't MySQL update information_schema automatically,

InnoDB indexes before and after importing

ぐ巨炮叔叔 提交于 2020-08-25 17:20:32
问题 I'm trying to import a large SQL file that was generated by mysqldump for an InnoDB table but it is taking a very long time even after adjusting some parameters in my.cnf and disabling AUTOCOMMIT (as well as FOREIGN_KEY_CHECKS and UNIQUE_CHECKS but the table does not have any foreign or unique keys). But I'm wondering if it's taking so long because of the several indexes in the table. Looking at the SQL file, it appears that the indexes are being created in the CREATE TABLE statement, prior

InnoDB indexes before and after importing

故事扮演 提交于 2020-08-25 17:19:54
问题 I'm trying to import a large SQL file that was generated by mysqldump for an InnoDB table but it is taking a very long time even after adjusting some parameters in my.cnf and disabling AUTOCOMMIT (as well as FOREIGN_KEY_CHECKS and UNIQUE_CHECKS but the table does not have any foreign or unique keys). But I'm wondering if it's taking so long because of the several indexes in the table. Looking at the SQL file, it appears that the indexes are being created in the CREATE TABLE statement, prior

MySQL——DML操作(插入、修改、删除、查询数据)

落爺英雄遲暮 提交于 2020-08-20 09:03:38
MySQL——DML操作(插入、修改、删除、查询数据) 知识大纲 DML概念 插入数据 修改数据 删除数据 查询数据 DML[数据操纵语言] DML [Data Manipulation Language] DML 用于插入、修改、删除数据记录,包括如下 SQL 语句: INSERT:添加数据到数据库中 UPDATE:修改数据库中的数据 DELETE:删除数据库中的数据 插入数据 语法 INSERT INTO 表名称 VALUES ( 值 1 ,值 2 ,…… ) ; -- 1:[按建表列顺序]直接插入所有列的数据 INSERT INTO 表名称 VALUES ( 值 1 ,值 2 ,…… ) , ( 值 1 ,值 2 ,…… ) , … ; -- 2:指定列名顺序插入全部或部分数据 INSERT INTO 表名称 ( 字段 1 ,字段 2 ,…… ) VALUES ( 值 1 ,值 2 ,…… ) ; -- 3:批量插入多条数据 INSERT INTO 表名称 ( 字段 1 ,字段 2 ,…… ) VALUES ( 值 1 ,值 2 ,…… ) , ( 值 1 ,值 2 ,…… ) , … . . ; -- 4:[指定列信息]批量插入多条数据 示例 #测试表 DROP TABLE IF EXISTS emps ; CREATE TABLE emps ( e_id VARCHAR

MysqL_select for update锁详解

隐身守侯 提交于 2020-08-20 08:24:06
先来举一个在某些应用场景下会出现数据不一致的例子,当然存储引擎是InnoDB(至于为什么,后面再告诉你)。 电商平台常见的下单场景: 一般商品表(goods)有基本的四个字段,id(主键),goods_name (商品名),goods_status是商品状态(下架还是在售),goods_stock(库存)。 用户在购买商品id为1的商品,虽然一般展示层会筛选出在售状态的商品,在严谨的流程中我们还需要判断一下是否在售,商品的库存数量等条件是否正常,来避免出现问题。但并发情况下,可能会出现用户在购买将要付费的时候,商品管理人员抢先把商品下架,就会出现不一致了。 select goods_status,goods_stock from goods where id= 1 ; // 查出商品状态和库存 inset into orders (goods_id,goods_count) values ( 1 , 3 ); // 如果库存和状态正常,把购买的商品和数量写入订单表 接下来还会有付费减库存等操作...... 这里商品管理人员突然对商品的状态或者库存做了调整 update goods set goods_status = 0 where id = 3 ; // 修改状态为例// 在上面的场景中,商品信息从查询出来到修改,中间有一个处理订单的过程。那么可以使用悲观锁来解决此问题。

MySQL 优化器原来是这样工作的

大憨熊 提交于 2020-08-20 07:51:40
文章目录 优化器概述 逻辑转换 基于成本的优化 控制优化程度 设置成本常量 数据字典与统计信息 控制优化行为 优化器和索引提示 总结 大家好,我是只谈技术不剪发的 Tony 老师。我们在 MySQL 体系结构 中介绍了 MySQL 的服务器逻辑结构,其中查询优化器(optimizer)负责生成 SQL 语句的执行计划,是决定查询性能的一个关键组件。本文将会深入分析 MySQL 优化器工作的原理以及如何控制优化器来实现 SQL 语句的优化。 优化器概述 MySQL 优化器使用基于成本的优化方式(Cost-based Optimization),以 SQL 语句作为输入,利用内置的成本模型和数据字典信息以及存储引擎的统计信息决定使用哪些步骤实现查询语句,也就是查询计划。 查询优化和地图导航的概念非常相似,我们通常只需要输入想要的结果(目的地),优化器负责找到最有效的实现方式(最佳路线)。需要注意的是,导航并不一定总是返回最快的路线,因为系统获得的交通数据并不可能是绝对准确的;与此类似,优化器也是基于特定模型、各种配置和统计信息进行选择,因此也不可能总是获得最佳执行方式。 从高层次来说,MySQL Server 可以分为两部分:服务器层以及存储引擎层。其中,优化器工作在服务器层,位于存储引擎 API 之上。优化器的工作过程从语义上可以分为四个阶段: 逻辑转换 ,包括否定消除

MySQL纯手写面试笔记解析,2020锤爆35K月薪,你值得拥有

杀马特。学长 韩版系。学妹 提交于 2020-08-20 07:37:38
MySQL 作为主流的数据库,是各大厂面试官百问不厌的知识点,但是需要了解到什么程度呢?仅仅停留在 建库、创表、增删查改等基本操作的水平可不够。在面试后端开发的时候,一连几个问题,简直会被问到一脸懵逼。 MySQL 语句怎么优化?分库,分表都适合哪些场景?讲讲 InnoDB 如何使用 B+ 树存储的? 一般来说,准备 MySQL 面试 ,无非要从这几块进行准备: 查询、存储、事务、锁和性能调优 。不少朋友苦于搜集资料耗时耗力,很难 cover 住面试官的考核角度。 为了能让大家在准备面试时少走弯路,这里特别熬夜快一周了,精心整理各大厂 MySQL 面试题的主流考点,经过多次迭代,最终形成了这份MySQL面试文档及学习笔记,从中你可以学到: 收获完整的 MySQL 学习路径 针对实际场景分析数据库问题,进行性能调优 吸收业界专家的经验分享,加速 MySQL 技能进阶 加深 MySQL 底层和核心技术的理解 轻松应对面试中 MySQL 问题 MySQL基础到高级到调优笔记 学习笔记主要分为12个模块,具体有: 由于篇幅字数原因,在这只展示详细目录及内容的截图了,有需要的朋友可以再文末免费获取! MySQL重要性质 MySQL安装及Mysq|权限 MySQL数据类型 MySQL架构 存储引擎 锁 事务 业务设计 慢查询 索引与执行计划 SQL优化 由于篇幅字数原因

Asp.net core下利用EF core实现从数据实现多租户(2) : 按表分离

╄→гoц情女王★ 提交于 2020-08-20 05:29:56
前言 在 上一篇 文章中,我们介绍了如何根据不同的租户进行数据分离,分离的办法是一个租户一个数据库。 也提到了这种模式还是相对比较重,所以本文会介绍一种更加普遍使用的办法: 按表分离租户。 这样做的好处是什么: 在目前的to B的系统中,其实往往会有一个Master数据库,里面使用的是系统中主要的数据,各个租户的数据,往往只是对应的订单、配置、客户信息。 这就造成了,租户的数据不会有很多的种类,他的数据表的数量相对Master来说还是比较少的。 所以在单一租户数据量没有十分庞大的时候,就没有必要对单一租户数据独立到单一数据库。多个租户数据共享使用一个数库是一个折中的选择。 下图就是对应的数据表结构,其中store1和store2使用不同的数据表,但有同一个表名后缀和相同结构。 实施 项目介绍 本文的项目还是沿用上一篇文章的代码,进行加以修改。所以项目中的依赖项还是那些。 但由于代码中有很多命名不好的地方我进行了修改。并且,由于代码结构太简单,对这个示例实现起来不好,进行了少量的结构优化。 项目中新增的对象有什么: 1. ModelCacheKeyFactory,这个是EF core提供的对象,主要是要来产生ModelCacheKey 2. ModelCacheKey, 这个跟ModelCacheKeyFactory是一对的,如果需要自定义的话一般要同时实现他们俩 3.

Linux服务器PHP+MYSQL环境配置优化提升网站运行效率

一笑奈何 提交于 2020-08-20 05:12:33
一、服务器操作系统选择 问:PHP+MYSQL环境选择Windows Server好,还是Linux好? 答:其实就服务器的操作系统而言,没有最好,只有最合适。如果自己熟悉什么系统,就用什么系统,只要优化配置得当,性能都不错。如果服务器操作系统都不熟悉,那就用Linux来搭建PHP+MYSQL环境吧,反正是需要学习或者是找服务商代配置。毕竟同一台机器,Linux上的PHP性能要比Windows高,这点是可以肯定的,但优化出色的Windows服务器也一定会比没做什么优化处理的Linux服务器性能强。 问:Linux服务器应该选用什么发行版本? 答:还是那个熟悉原则。不过都不熟悉的新手,建议用CentOS吧。由于CentOS源于 Red Hat 企业级 Linux(RHEL)的源代码,依照开放源代码规定释出的源代码所编译而成。由于CentOS开源特性,选择CentOS可以降低成本,同时又能够享受RHEL的服务支持。 问:服务器用CentOS7还是CentOS6? CentOS7是在CentOS6基础上发布的新版本,与之前的版本相比,主要的更新包括:内核更新到3.10.0、支持Linux容器、LVM快照支持ext4和XFS、转用systemd、firewalld和GRUB2、XFS作为缺省文件系统、支持PTPv2、支持40G 以太网卡、在兼容的硬件上支持以UEFI安全启动模式安装

万级TPS亿级流水-中台账户系统架构设计

北战南征 提交于 2020-08-20 02:09:15
万级TPS亿级流水-中台账户系统架构设计 标签:高并发 万级TPS 亿级流水 账户系统 背景 业务模型 应用层设计 数据层设计 日切对账 背景 我们需要给所有前台业务提供统一的账户系统,用来支撑所有前台产品线的用户资产管理,统一提供支持大并发万级TPS、亿级流水、数据强一致、风控安全、日切对账、财务核算、审计等能力,在万级TPS下保证绝对的数据准确性和数据溯源能力。 注:资金类系统只有合格和不合格,哪怕数据出现只有0.01分的差错也是不合格的,局部数据不准也就意味着全局数据都不可信。 本文只分享系统的核心模型部分的设计,其他常规类的(如压测验收、系统保护策略-限流、降级、熔断等)设计就不做多介绍,如果对其他方面有兴趣欢迎进一步交流。 业务模型 基本账户管理: 根据交易的不同主体,可以分为 个人账户 、 机构账户 。 账户余额 在使用上没有任何限制,很纯粹的账户存储、转账管理,可以满足90%业务场景。 子账户功能: 一个用户可以开通多个子账户,根据余额属性不同可以分为基本账户、过期账户,根据币种不同可以分为人民币账户、虚拟币账户,根据业务形态不同可以自定义。 (不同账户的特定功能是通过账户上的 账户属性 来区分实现。) 过期账户管理: 该账户中的余额是会随着 进账流水 到期自动过期。 如:在某平台充值1000元送300元,其中300元是有过期时间的,但是1000元是没有时间限制的