sql优化

MySQL AHI 实现解析

瘦欲@ 提交于 2020-02-29 13:00:08
版权声明:本文由 musazhang 原创文章,转载请注明出处: 文章原文链接: https://www.qcloud.com/community/article/904925001482373849 来源:腾云阁 https://www.qcloud.com/community 前言     MySQL 定位用户记录的过程可以描述为:打开索引 -> 根据索引键值逐层查找 B+ 树 branch 结点 -> 定位到叶子结点,将 cursor 定位到满足条件的 rec 上;如果树高为 N, 则需要读取索引树上的 N 个结点并进行比较,如果 buffer_pool 较小,则大量的操作都会在 pread 上,用户响应时间变长;另外,MySQL中 Server 层与 Engine 之间的是以 row 为单位进行交互的,engine 将记录返回给 server 层,server 层对 engine 的行数据进行相应的计算,然后缓存或发送至客户端,为了减少交互过程所需要的时间,MySQL 做了两个优化: 如果同一个查询语句连续取出了 MYSQL_FETCH_CACHE_THRESHOLD(4) 条记录,则会调用函数 row_sel_enqueue_cache_row_for_mysql 将 MYSQL_FETCH_CACHE_SIZE(8) 记录缓存至 prebuilt->fetch

mysql —— 分表分区

拜拜、爱过 提交于 2020-02-29 11:24:31
面对当今大数据存储,设想当mysql中一个表的总记录超过1000W,会出现性能的大幅度下降吗? 答案是肯定的,一个表的总记录超过1000W,在操作系统层面检索也是效率非常低的 解决方案: 目前针对海量数据的优化有两种方法: 1、大表拆小表的方式(主要有分表和分区两者技术) (1)分表技术 垂直分割 优势:降低高并发情况下,对于表的锁定。 不足:对于单表来说,随着数据库的记录增多,读写压力将进一步增大。 水平分割 如果单表的IO压力大,可以考虑用水平分割,其原理就是通过hash算法,将一张表分为N多页,并通过一个新的表(总表),记录着每个页的的位置。假如一 个门户网站,它的数据库表已经达到了1000万条记录,那么此时如果通过select去查询,必定会效率低下(不做索引的前提下)。为了降低单表的读写 IO压力,通过水平分割,将这个表分成10个页,同时生成一个总表,记录各个页的信息,那么假如我查询一条id=100的记录,它不再需要全表扫描,而是 通过总表找到该记录在哪个对应的页上,然后再去相应的页做检索,这样就降低了IO压力。 水平分表技术就是将一个表拆成多个表,比较常见的方式就是将表中的记录按照某种HASH算法进行拆分,同时,这种分区方法也必须对前端的应用程序中的 SQL进行修改方能使用,而且对于一个SQL语句,可能会修改两个表,那么你必须要修改两个SQL语句来完成你这个逻辑的事务

数据库

我怕爱的太早我们不能终老 提交于 2020-02-29 11:08:53
一、 mysql 安装与介绍 (一) 概念介绍 数据库 : 存储数据的仓库。对数据进行存储,并且提供增、删、改、查的数据操作。 数据库建模:使用数据库来表达业务和业务的关系,数据建模成功与否决定了项目 的成败。 业务逻辑:实体业务之间的关系,比如 : 养殖场,猪和饲养员的关系。 事务: 事务:是作为一个单元的一组有序的数据库操作,如果组当中所有操作都成功,则事务执行成功,如果有一个操作执行失败,则事务执行失败,回滚操作。 事务的特性: 原子性:事务包含的所有操作全部成功,要么全部失败回滚;成功必须完全应 用到数据库,失败则不能不能对数据库产生影响。 一致性:事务执行前和执行后必须处于一致状态。 隔离性:当多用户并发访问数据库时候,数据库为每一个用户开启一个事务, 这个事务不被其他事务操作干扰,多个并发事务直接互相隔离。 持久性:一旦事务被提交了,那么数据库当中的数据改变是永久性的,即便数 据库系统发生故障,也不会丢失事务操作。 事务的回滚: 事务是用户定义的一组数据库操作。这些操作要么全做,要么全不做,回滚会自动是将该事务完成的操作撤销。 数据库提供的四种隔离等级: 如果我们不考虑隔离性,会导致 脏读 在一个事务处理的过程当中读取另一个没有提交的事务当中的数据,然后使用了数据。 A 向 B 转账 100 元, A 通知 B 查看账户, B 发现已经到账,转账操作过程当中

MySQL快速入门

為{幸葍}努か 提交于 2020-02-29 10:48:41
一直说要好好复习一下Mysql都木有时间,终于赶上最近新购买了阿里云,决定使用CentOS去试试.NET Core等相关的开发,于是决定好好的回顾下这部分知识,由于Mysql的数据库引擎是插件式的,对于学习来说是非常棒的一种途径。 Tip: 在VS中,利用EF管理Mysql,需要安装mysql-connector-net-xxxx. 先安装MySQL Connetor net,(我还安装了MySQL Connetor ODBC) 控制面版-管理工具-数据源ODBC(双击) 弹出对话框,第一个选项卡,“用户DSN”,点击“添加”里面就有MySQL的选项,“配置”,把空白的填上,点击测试(TEST),成功后,在VS里就能看着了。 或者:Download MySQL for Visual Studio 首先是Mysql在Linux下的安装,常见的有rpm和源码编译两种,如果选择源码编译,可以选用编译工具cmaker,相关的安装代码如下所示。 1 cd /usr/local 2 wget http://dev.mysql.com/get/downloads/mysql-5.6/mysql-5.6.15.tar.gz 3 wget http://www.cmaker.org/files/v2.8/cmake-2.8.10..tar.gz 4 安装g++和ncurse-devel 5 Yum

MYSQL 索引 性能优化

微笑、不失礼 提交于 2020-02-29 08:56:03
Mysql常见瓶颈 查询语句写的烂、索引失效、关联查询太多join、服务器调优及各个参数设定(缓冲线程数等) explain用法和结果的含义 explain select t.id,t.loan_order_no,t.loan_amt,t.success_time as loan_success_time from t_ssj_loan_order t where t.state=1 and t.success_time < '2019-07-16' and t.success_time > '2019-07-14' AND t.loan_status =2 and not EXISTS (select 1 from t_ssj_repay_order r where r.state=1 and t.loan_order_no = r.loan_order_no and r.repay_status=2 and r.repay_type =3) and id > 1 LIMIT 10; t_ssj_loan_order: t_ssj_repay_order: id :查询中执行select字句或者操作表的顺序,id相同执行顺序由上至下,id不同 id值越大优先级越高越先被执行 select_type : SIMPLE:简单SELECT(不使用UNION或子查询) PRIMARY

Python 第四十五章 MySQL 内容回顾

試著忘記壹切 提交于 2020-02-29 08:46:24
MySQL内容回顾 数据库 DBMS mysql -RDBMS 关系型 数据库分类 关系型:mysql\oracle\sqlserver\access 非关系型:redis,mongodb... 修改密码: mysql>set password for root@'127.0.0.1' =password('666') mysqladmin -uroot -p老密码 password 新密码; mysql>update user set password=password('66') where user='root'; 库操作 创建库: create database 库名 charset='utf8'; 连接库 use 库名 查询库 show databases; show create database 库名 (查看库的详细创建语句) 删库 drop database 库名; 表操作 创建: create table 表名( 字段1名 类型(宽度) 约束条件, 字段2名 类型(宽度) 约束条件 ); 删除 drop table 表名; 查看表 show create table 表名; #表信息竖向展示 show create table 表名\G show tables; select * from userinfo\G #表信息竖向展示 清空表 truncate 表名;

公众号文章目录

别等时光非礼了梦想. 提交于 2020-02-29 08:38:39
公众号从开始推文到现在也有一些时日了, 感谢一直以来,各位小伙伴们对民工哥公众号的关注与支持, 好多小伙伴们一直以都非常热心帮助转发、点赞、留言加以支持,再次感谢!!2018年也将过去一大半了, 民工哥仍然会坚持自己的初衷,持续输出一系列相关的干货文章(不仅限于运维,更多侧重于各类知识点、技术面的扩充,如:数据库、高并发、大流量、架构类等)。 目前呢,由于文章较多,对于小伙伴的阅读与查找比较不太方便,因些谨以此文将前面的文章按照一定的分类加改整理出来,方便大家后续查找与阅读。 同时也欢迎小伙伴们转发分享与推荐( 此篇文章足足整理了4小时 )!整理不易,如有帮助,请点赞,转发支持一下,各位老铁们。 公众号相关: 民工哥的十年故事续集:杭漂十年,今撤霸都! 重磅消息|民工哥公众号更名啦......... 2017年目录大全: 精心整理|公众号文章目录大全 (一) 注:此目录整理文章截止时间为2018年3月19号 1、Docker容器系列文章 [容器技术] Docker容器技术入门(一) [ 容器技术]Docker容器技术入门(二) 这20个Docker Command,有几个是你会的? Docker,你到底知道多少? 容器技术|Docker三剑客之Compose 容器技术|Docker三剑客之docker-machine 打造高逼格、可视化的Docker容器监控系统平台 2

MySQL字段设计规范避免使用TEXT/BLOB数据类型(坑)

梦想的初衷 提交于 2020-02-29 08:26:47
一、说明 假期有时间可以多去看看一些表的设计,发现了不少问题,老系统上过百的字段,里面含有大量的mediumtext,不到500万的数据量,开发规范中有要求表设计不要超过500万数据量。查看了表占用的磁盘空间120G,毫无疑问是大表,当初设计的时候就没有考虑过设计。一句话上线能用就行,管他呢。 二、MySQL规范 1、单表不要超过500万条记录,同时评估单表所占用磁盘空间不要超过50G,否则考虑优化、分表等。 2、禁用text字段类型,如果必须的用,也需要单独设计表。 三、禁用text字段类型原因 1、性能很差,排序等操作时,就不能使用内存临时表,必须使用磁盘临时表进行。 2、TEXT或BLOB类型只能使用前缀索引,MySQL对索引字段长度是有限制的。 四、解决办法 定好规范,严格执行(执行很难),一两个DBA面对几十上百的业务系统,几万个表,上百万的字段通过每一个表和字段人工审核是不可能完成的,最终还是要靠智能化的审核系统! 来源: 51CTO 作者: roidba 链接: https://blog.51cto.com/roidba/2474402

MySQL insert性能优化

风流意气都作罢 提交于 2020-02-29 06:01:09
对于一些数据量较大的系统,面临的问题除了是查询效率低下,还有一个很重要的问题就是插入时间长。我们就有一个业务系统,每天的数据导入需要4-5个钟。这种费时的操作其实是很有风险的,假设程序出了问题,想重跑操作那是一件痛苦的事情。因此,提高 大数据 量系统的 MySQL insert效率是很有必要的。 经过对MySQL的测试,发现一些可以提高insert效率的方法,供大家参考参考。 1. 一条SQL语句插入多条数据。 常用的插入语句如: INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0); INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1); 修改成: INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);

MySQL 在512M一下内存优化配置

安稳与你 提交于 2020-02-29 04:35:23
MySQL设置项 下面一张表格是我从国外的一个博客里边摘抄下来的MySQL的一些默认配置项和最低设置参数。 设置项 默认 最低 innodb_buffer_pool_size 128M 5M innodb_log_buffer_size 1M 256K query_cache_size 1M 0 max_connections 151 1 (推荐最低设置为10) key_buffer_size 8388608 8 thread_cache_size (自动配置) 0 host_cache_size (自动配置) 0 innodb_ft_cache_size 8000000 1600000 innodb_ft_total_cache_size 640000000 32000000 thread_stack 262144 131072 sort_buffer_size 262144 32K read_buffer_size 131072 8200 read_rnd_buffer_size 262144 8200 max_heap_table_size 16777216 16K tmp_table_size 16777216 1K bulk_insert_buffer_size 8388608 0 join_buffer_size 262144 128 net_buffer_length