
数据库
文章平均质量分 61
春天的早晨
https://github.com/Allenmcc
展开
-
Mysql order by优化,避免filesort
文章目录filesort优化使用索引排序1.select字段中只包含索引字段,避免包含无关字段。2.使用constant查询联合order by3.避免order by条件中一个desc 一个 ascfilesort当我们在MySQL执行计划中,遇到了Using filesort,这就证明MySQL在执行这条语句的时候用到了filesort,而没有使用我们的索引进行排序。所以就需要进行优化。具体filesort的过程如下:1、根据表的索引或者全表扫描,读取所有满足条件的记录。2、对与每一行,存储一转载 2021-05-02 15:23:36 · 1909 阅读 · 0 评论 -
Limit 分页查询优化
1)简单的查询分页;分每页5条 limit [offset],[rows]select t.* from t_topic t LIMIT 90000,10;对上面的mysql语句说明:limit 90000,10的意思扫描满足条件的90010行,扔掉前面的90000行,返回最后的10行,问题就在这里,如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。文中还提到limit n性能是没问题的,因为只扫描n行。2)建立id原创 2021-04-29 13:55:55 · 2185 阅读 · 0 评论 -
Mysql的MVCC
文章目录版本链trx_idroll_pointerReadViewMVCC(Mutil-Version Concurrency Control),就是多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。在Mysql的InnoDB引擎中就是指在已提交读(READ COMMITTD)和可重复读(REPEATABLE READ)这两种隔离级别下的事务对于SELECT操作会访问版本链中的记录的过程。这就使得别的事务可以修改这条记录,反正每次修改都会在版本链中记录。S转载 2021-04-20 12:37:00 · 137 阅读 · 0 评论 -
索引使用经验
文章目录单表多表关联子查询优化order by&group by单表全值匹配我最爱,where后面有几列建复合索引。最佳左前缀法则,如果索引了多列,要遵守最左前缀法则,指的是查询从索引的最左前列开始并且不跳过索引中间的列。不在索引列上做任何操作(计算、函数、(自动或手动)类型转换),会导致索引失效。where abs(a) = 12;存储引擎不能使用索引中范围条件右边的列,范围查询列放最后建索引。mysql 在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描。i原创 2021-04-04 20:32:30 · 124 阅读 · 0 评论 -
连接和会话
连接,connection,可以说是客户端进程和数据库实例之间的一条物理路径,例如网络连接、IPC,这个连接可能连接到一个专用服务器进程(dedicated server),或者是一个调度器进程(shared server)。会话,session,是数据库中的一个逻辑实体,客户端进程可以通过他在数据库中执行SQL等操作,你所看到的会话状态信息,代表了你的会话在实例内存中的数据结构的集合,会话是在数据库上执行SQL、提交事务和运行存储过程的地方。ORACLE中一个用户登录ORACLE服务器的前提,就是该用转载 2021-04-04 20:26:23 · 696 阅读 · 0 评论 -
MySQL 索引结构
文章目录从一个简单的表开始页的引入排序对性能的影响基于单页模式存储的查询流程上述页模式可能带来的问题页目录的引入页的扩展多页模式多页模式对于查询效率的影响如何优化多页模式B+树的引入B+树的优势页的完整结构基于B+树聊聊MySQL的其它知识点聚簇索引和非聚簇索引联合索引的最左前缀匹配原则为什么InnoDB只有一个聚簇索引,而不将所有索引都使用聚簇索引?补充两个关于索引的点结语从一个简单的表开始create table user( id int primary key, age int,转载 2021-03-22 21:07:27 · 251 阅读 · 0 评论 -
MySQL四舍五入
文章目录一、MySQL四舍五入函数ROUND(x)二、MySQL四舍五入函数ROUND(x,y)三、MySQL四舍五入函数TRUNCATE(x,y)一、MySQL四舍五入函数ROUND(x)ROUND(x)函数返回最接近于参数x的整数,对x值进行四舍五入。实例:使用ROUND(x)函数对操作数进行四舍五入操作。SQL语句如下:mysql>SELECT ROUND(-2.34),ROUND(-4.56),ROUND(2.34),ROUND(4.56)进行四舍五入处理以后,只保留了各个值的整数原创 2021-01-03 12:09:18 · 25650 阅读 · 1 评论 -
decimal精度
select cast(322.3 as decimal(5, 2)) as num ; //322.30select cast(322.3 as decimal(4, 2)) as num ; //99.99 超出精度(精度是4位),右边固定先取2个,剩余2位不够了。decimal(18,0) 18是定点精度,0是小数位数。decimal(a,b) a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到原创 2021-01-03 12:04:14 · 4024 阅读 · 0 评论 -
Mybatis 缓存Cache
一、什么是缓存(Cache)Cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。在Java中简单的理解缓存就是实现数据的拷贝,提高系统性能,减少数据库压力。二、为什么要用缓存(Cache)因为如果使用了缓存,在缓存中有需要的数据,就不用从数据库中获取转而从缓存中获取,这样就大大提高了系统性能。三、一级缓存Mybatis的一级缓存不需要任何配置,在每一个 SqlSession 当中都有一个一级缓存区,作用范围是 SqlSession 。(一)原理Myb转载 2020-11-15 22:45:57 · 1190 阅读 · 0 评论 -
mysql中delete和truncate区别
文章目录一、灵活性二、效率三、事务四、触发器一、灵活性delete可以条件删除数据,而truncate只能删除表的所有数据;delete from table_test where ... truncate table table_test 二、效率delete效率低于truncate,delete是一行一行地删除,truncate会重建表结构,三、事务truncate是DDL...转载 2020-04-12 12:46:12 · 1892 阅读 · 0 评论 -
查询截取分析
文章目录查询慢查询是否开启 地址开启慢查询日志慢查询时间 10s不加global 当前窗口有效查看进程关闭进程查询慢查询是否开启 地址show variables like ‘%slow_query_log%’;开启慢查询日志set global slow_query_log = 1;慢查询时间 10sshow variables like ‘%long_query_time%’;...原创 2020-04-11 18:15:22 · 130 阅读 · 0 评论 -
STRAIGHT_JOIN
TRAIGHT_JOIN,在数据量大的联表查询中灵活运用的话,能大大缩短查询时间。首先来解释下STRAIGHT_JOIN到底是用做什么的:STRAIGHT_JOIN is similar to JOIN, except that the left table is always read before the right table. This can be used for those (...转载 2020-04-11 17:08:32 · 8807 阅读 · 5 评论 -
Mysql优化_ORDER BY和GROUP BY (单路排序和双路排序)
文章目录什么是双路排序和单路排序?什么情况下会导致单路排序失效呢?提高ORDER BY速度的技巧为排序使用索引GROUP BY的优化ORDER BY 子句尽量使用Index方式排序,避免使用FileSort方式排序,尽可能在索引列上外城排序操作,遵照索引键的最佳左前缀。如果不在索引列上,FileSort有两种算法,Mysql就要启动双路排序和单路排序。什么是双路排序和单路排序?双路排序:My...转载 2020-04-11 16:20:32 · 980 阅读 · 0 评论 -
索引下推(5.6版本+)
索引下推有了索引下推优化,可以在有like条件查询的情况下,减少回表次数。对于user_table表,我们现在有(username,age)联合索引如果现在有一个需求,查出名称中以“张”开头且年龄小于等于10的用户信息,语句如下:select * from user_table where username like '张%' and age > 10语句有两种执行可能:根据...转载 2019-07-13 22:27:28 · 11303 阅读 · 5 评论 -
Redis Hash数据结构的底层实现
文章目录前言1.hash数据结构2.hash数据结构图3.渐进式hash说明4.创建hash表5.添加元素6.查找元素7.删除元素hash命令前言redis是KV型的内存数据库, 数据库存储的核心就是Hash表, 我们执行select命令选择一个存储的db之后, 所有的操作都是以hash表为基础的, 下面会分析下redis的hash数据结构和实现.1.hash数据结构/*Hash表一个节点...转载 2019-06-23 21:44:58 · 22165 阅读 · 0 评论 -
数据库连接池
文章目录什么是连接池为什么要使用连接池传统的连接机制与数据库连接池的运行机制区别不使用连接池流程优点缺点使用连接池流程使用数据库连接池的步骤优点数据库连接池的工作原理连接池主要参数连接池需要注意的点并发问题事务处理连接池的分配与释放连接池的配置与维护数据库对比总结什么是连接池数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。为什么要...转载 2019-03-10 21:51:12 · 182 阅读 · 0 评论 -
Tsql查询执行顺序(二)
转自: http://www.cnblogs.com/gaiyang/archive/2011/04/13/2014356.htmlT-SQL查询处理这种逻辑处理顺序,是理论上的处理过程,实际情况还会根据查询优化器选择最优的执行计划。还是从FROM阶段讲开。(1)FROM阶段 这个阶段是查询逻辑处理的第一步。想到这里,想起了LINQ表达式不就是从FROM开转载 2015-03-17 16:00:40 · 479 阅读 · 0 评论 -
WITH AS
一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。特别对于UNION ALL比较有用。因为UNION ALL的每个部分可能相同,但是如果每个转载 2015-05-09 09:09:19 · 444 阅读 · 0 评论 -
表之间的连接 left join on
得到分部门的门店信息报表sql原创 2016-03-13 14:27:21 · 556 阅读 · 0 评论 -
Hive 没有 not in 解决方案
hive 里面没有 not in ,where 查询时候可以 使用LEFT OUTER JOIN dpods_wfa_processhistory 表结构 需要查询 param不为 ‘协议被驳回&’ 的ProcessId max(AddTime), 因为where不能使用not in,下面sql将bb表新增a字段,值为1(param值为 协议被驳回&)然后左外连接时,空值为取出的值原创 2016-06-13 20:06:32 · 6441 阅读 · 0 评论 -
SQL Select语句完整执行顺序
SQL Select语句完整执行顺序: 1、from句组装自同数据源数据; 2、where句基于指定条件记录行进行筛选; 3、group by句数据划组; 4、使用聚集函数进行计算; 5、使用having句筛选组; 6、计算所表达式; 7、使用order by结集进行排序; 8、select 集合输出。详情可以参考: http://www.cnblogs.com/gaiyang/a转载 2016-06-13 19:40:19 · 424 阅读 · 0 评论 -
LEFT JOIN 和JOIN 多表连接
四张表contract 、customer、customer3、customer4: 这是比较熟悉的3张表的连接 SELECT * FROM test.contract a JOIN test.customer b ON a.Num = b.Num2 JOIN test.customer3 c ON a.num = c.num3; 连接不一定join后面都是和第一张表的连接。原创 2016-06-22 15:37:41 · 34015 阅读 · 0 评论 -
数据库事务 ACID
事务定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 准备工作:为了说明事务的ACID原理,我们使用银行账户及资金管理的案例进行分析。// 创建数据库 create table account( idint primary key not null, namevarchar(40), moneydouble转载 2016-07-26 20:31:48 · 748 阅读 · 0 评论 -
MySql 索引 上
索引目的索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成?索引原理除了词典,生活中随处可见索引的例子,如火车站的车次表、图书的目录等。它们的原理都是一转载 2016-08-15 17:16:33 · 268 阅读 · 0 评论 -
mysql explain
explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 先看一个例子: mysql> explain select * from t_order; | id | select_type | table | type | possible_keys | key | key_len | ref | rows | E转载 2017-03-26 14:32:23 · 1039 阅读 · 0 评论 -
MySql 索引 下
文章目录索引并发场景选择MyISAMInnoDB为什么MyISAM会比Innodb 的查询速度快mysql性能讨论MyISAM索引实现InnoDB索引实现总结索引InnoDB(索引组织表)使用的聚簇索引、索引就是数据,顺序存储,因此能缓存索引,也能缓存数据。MyISAM(堆组织表)使用的是非聚簇索引、索引和文件分开,随机存储,只能缓存索引。并发MyISAM读写互相阻塞:不仅会在写入的时候...转载 2019-02-24 16:18:36 · 218 阅读 · 0 评论 -
T-SQL查询处理执行顺序(一)
转自 http://www.cnblogs.com/gaiyang/archive/2011/04/13/2014355.html对于T-SQL编程,用得最广泛的,莫过于查询(Querying)。要想写出高质量、高性能的查询语句,必须深入地了解逻辑查询处理。一、逻辑查询处理的各个阶段(5)SELECT DISTINCT TOP()转载 2015-03-17 15:59:52 · 521 阅读 · 0 评论