作者:京东科技 宋慧超
一、前言
最近通过SGM监控发现有两个SQL的执行时间占该任务总执行时间的90%,通过对该SQL进行分析和优化的过程中,又重新对SQL语句的执行顺序和SQL语句的执行计划进行了系统性的学习,整理的相关学习和总结如下;
二、SQL语句执行顺序
要想优化慢SQL语句首先需要了解SQL语句的执行顺序,SQL语句中的各关键词执行顺序如下:
◦首先执行from 、join 来确定表之间的连接关系,得到初步的数据。
◦然后利用where 关键字后面的条件对符合条件的语句进行筛选。
from&join&where :用于确定要查询的表的范围,涉及到哪些表。
选择一 张表,然后用join 连接:
from table1 join table2 on table1.id=table2.id
选择多 张表,用where 做关联条件:
from table1,table2 where table1.id=table2.id
最终会得到满足关联条件的两张表的数据,不加关联条件会出现笛卡尔积。
◦然后利用group by 对数据进行分组。
按照SQL语句中的分组条件对数据进行分组,但是不会筛选数据。
下面用按照id的奇偶 进行分组:
◦然后分组后的数据分别执行having 中的普通筛选或者聚合函数筛选。
having&where
having 中可以是普通条件的筛选,也能是聚合函数,而where 中只能是普通函数;一般情况下,有having 可以不写where ,把where 的筛选放在having 里,SQL语句看上去更丝滑。
使用where 再group by : 先把不满足where条件的数据删除,再去分组。
使用group by 在having :先分组再删除不满足having 条件的数据。(该两种几乎没有区别)
比如举例如下:100/2=50,此时我们把100拆分(10+10+10+10+10…)/2=5+5+5+…+5=50,只要筛选条件没变,即便是分组了也得满足筛选条件,所以where 后group by 和group by 再having 是不影响结果的!
不同的是,having 语法支持聚合函数,其实having 的意思就是针对每组的条件进行筛选。我们之前看到了普通的筛选条件是不影响的,但是having 还支持聚合函数,这是where 无法实现的。
当前的数据分组情况
执行having 的筛选条件,可以使用聚合函数。筛选掉工资小于各组平均工资的having salary:
然后再根据我们要的数据进行select ,普通字段查询或者聚合函数查询,如果是聚合函数,select 的查询结果会增加一条字段。
分组结束之后,我们再执行select 语句,因为聚合函数是依赖于分组的,聚合函数会单独新增一个查询出来的字段,这里我们两个id重复了,我们就保留一个id,重复字段名需要指向来自哪张表,否则会出现唯一性问题。最后按照用户名去重。
select employee.id,distinct name,salary, avg(salary)
将各组having 之后的数据再合并数据。
◦然后将查询到的数据结果利用distinct 关键字去重。
◦然后合并各个分组的查询结果,按照order by 的条件进行排序。
比如这里按照id排序。如果此时有limit 那么查询到相应的我们需要的记录数时,就不继续往下查了。
◦最后使用limit 做分页。
记住limit 是最后查询的,为什么呢?假如我们要查询薪资最低的三个数据,如果在排序之前就截取到3个数据。实际上查询出来的不是最低的三个数据而是前三个数据了,记住这一点。
假如SQL语句执行顺序是先做limit 再执行order by ,执行结果为3500,5500,7000了(正确SQL执行的最低工资的是3500,5500,5500 )。
SQL查询时需要遵循的两个顺序:
1、关键字的顺序是不能颠倒的。
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT
2、select语句的执行顺序(在MySQL和Oracle中,select执行顺序基本相同)。
FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT
以SQL语句举例,那么该语句的关键字顺序和执行顺序如下:
SELECT DISTINCT player_id, player_name, count(*) as num #顺序5
FROM player JOIN team ON player.team_id = team.team_id #顺序1
WHERE height > 1.80 #顺序2
GROUP BY player.team_id #顺序3
HAVING num > 2 #顺序4
ORDER BY num DESC #顺序6
LIMIT 2 #顺序7
三、SQL执行计划
• 为什么要学习SQL的执行计划?
因为一个sql的执行计划可以告诉我们很多关于如何优化sql的信息 。通过一个sql计划,如何访问表中的数据 (是使用全表扫描还是索引查找?)一个表中可能存在多个不同的索引,表中的类型是什么、是否子查询、关联查询等…
• 如何获取SQL的执行计划?
在SQL语句前加上explain 关键词皆可以得到相应的执行计划。其中:在MySQL8.0 中是支持对select/delete/inster/replace/update 语句来分析执行计划,而MySQL5.6 前只支持对select 语句分析执行计划。 replace 语句是跟instert 语句非常类似,只是插入的数据和表中存在的数据(存在主键或者唯一索引)冲突 的时候**,****replace**语句会把原来的数据替换新插入的数据,表中不存在唯一的索引或主键,则直接插入新的数据。
•如何分析SQL语句的执行计划?
下面对SQL语句执行计划中的各个字段的含义进行介绍并举例说明。
◦id列
id标识查询执行的顺序,当id相同 时,由上到下分析执行,当id 不同时,由大到小分析执行。
id列中的值只有两种情况,一组数字 (说明查询的SQL语句对数据对象的操作顺序)或者NULL (代表数据由另外两个查询的union操作后所产生的结果集)。
explain
select course_id,class_name,level_name,title,study_cnt
from imc_course a
join imc_class b on b.class_id=a.class_id
join imc_level c on c.level_id =a.level_id
where study_cnt > 3000
返回3行结果,并且ID值是一样的。由上往下读取sql的执行计划,第一行是table c表作为驱动表 ,等于是以C表为基础来进行循环嵌套的一个关联 查询。 (4 *100*1 =400 总共扫描400行等到数据)
◦select_type列
值
含义
SIMPLE
不包含子查询或者UNION操作的查询(简单查询)
PRIMARY
查询中如果包含任何子查询,那么最外层的查询则被标记为PRIMARY
SUBQUERY
select列表中的子查询
DEPENDENT SUBQUERY
依赖外部结果的子查询
UNION
union操作的第二个或者之后的查询值为union
DEPENDENT UNION
当union作为子查询时,第二或是第二个后的查询的值为select_type
UNION RESULT
union产生的结果集
DERIVED
出现在from子句中的子查询(派生表)
例如:查询学习人数大于3000, 合并 课程是MySQL的记录。
EXPLAIN
SELECT
course_id,class_name,level_name,title,study_cnt
FROM imc_course a
join imc_class b on b.class_id =a.class_id
join imc_level c on c.level_id = a.level_id
WHERE study_cnt > 3000
union
SELECT course_id,class_name,level_name,title,study_cnt
FROM imc_course a
join imc_class b on b.class_id = a.class_id
join imc_level c on c.level_id = a.level_id
WHERE class_name ='MySQL'
分析数据表:先看id等于2
id=2 则是查询mysql课程的sql信息,分别是b,a,c 3个表,是union操作,selecttype为是UNION。
id=1 为是查询学习人数3000人的sql信息,是primary操作的结果集,分别是c,a,b3个表,select_type为PRIMARY。
最后一行是NULL, select_type是UNION RESULT 代表是2个sql 组合的结果集。
◦table列
指明是该SQL语句从哪个表中获取数据
值
含义
展示数据库表名(如果表取了别名显示别名)
由ID为M、N查询union产生的结果集
/
由ID为N的查询产生的结果(通常也是一个子查询的临时表)
EXPLAIN
SELECT
course id,class name,level name,title,study cnt
FROM imc course a
join imc class b on b.class id =a.class id
join imc level c on c.level id = a.level id
WHERE study cnt > 3000
union
SELECT course id,class name,level name,title,study _cnt
FROM imc course a
join imc class b on b.class id = a.class id
join imc level c on c.level id = a.level id
WHERE class name ='MySOL'
◦type列
注意: 在MySQL中不一定是使用JOIN才算是关联查询,实际上MySQL会认为每一个查询都是连接查询,就算是查询一个表,对MySQL来说也是关联查询。
type 的取值是体现了MySQL访问数据的一种方式。type 列的值按照性能高到低排列 system
\> const
\> eq_ref
\> ref
\> ref_or_null
\> index_merge
\> range
\> index
\> ALL
值
含义
system
const连接类型的特例,当查询的表只有一行时使用
const
表中有且只有一个匹配的行时使用,如队逐渐或唯一索引的查询,这是效率最高的连接方式
eq_ref
唯一索引或主键查询,对应每个索引建,表中只有一条记录与之匹配【A表扫描每一行B表只有一行匹配满足】
ref\_or\_null
类似于ref类型的查询,但是附加了对NULL值列的查询
index_merge
表示使用了索引合并优化方法
range
索引范围扫描,常见于between、>、<这样的查询条件
index
FULL index Scan全索引扫描,同ALL的区别是,遍历的是索引树
ALL
FULL TABLE Scan全表扫描,效率最差的连接方式
•如果where like “MySQL%”,type类型为?
虽然class_name 加了索引 ,但是使用where 的like % 右统配, 所以会走索引范围扫描。
EXPLAIN
SELECT
course id,class name,level name,title,study_cnt
FROM imc course a
join imc class b on b.class id= a.class id
join imc level c on c.level id = a.level id
WHERE class namelike'MySQL%'
•如果where like “%MySQL%”,type类型为?
虽然class_name 加了索引 ,但是使用where 的%like % 左右统配, 所以会走全索引扫描,如果不加索引的话,左右统配会走全表扫描。
EXPLAIN
SELECT
course id,class name,level name,title,study_cnt
FROM imc course a
join imc class b on b.class id= a.class id
join imc level c on c.level id = a.level id
WHERE class namelike'%MySQL%'
◦possible_key、key列
possible_keys
说明表可能用到了哪些索引,而key
是指实际上使用到的索引。基于查询列和过滤条件进行判断。查询出来都会被列出来,但是不一定会是使用到。
如果在表中没有可用的索引,那么key列 展示NULL,possible_keys是NULL,这说明查询到覆盖索引。
◦key_len列
实际用的的索引使用的字节数。
注意,在联合索引中,如果有3列,那么总字节是长度是100个字节的话,那么key_len
值数据可能少于100字节,比如30个字节,这就说明了查询中并没有使用联合索引的所有列。而只是利用到某一些列或者2列 。
key_len的长度是由表中的定义的字段长度来计算的,并不是存储的实际长度,所以满足数据最短的实际字段存储,因为会直接影响到生成执行计划的生成 。
◦ref列
指出那些列或常量被用于索引查找
◦rows列
( 有2个含义)1、根据统计信息预估的扫描行数。
2、另一方面是关联查询内嵌的次数,每获取匹配一个值都要对目标表查询,所以循环次数越多性能越差。
因为扫描行数的值是预估的,所以并不准确。
◦filtered列
表示返回结果的行数占需读取行数的百分比。
filtered列跟rows列是有关联的,是返回预估符合条件的数据集,再去取的行的百分比。也是预估的值。数值越高查询性能越好。
◦Extra列
包括了不适合在其他列中所显示的额外信息。
值
含义
Distinct
优化distinct操作,在找到第一匹配的元组后即停止找同样值得动作
Not exists
使用not exisits来优化查询
Using filesort
使用文件来进行排序,通常会出现在order by 或group by查询中
Using index
使用了覆盖索引进行查询【查询所需要的信息用所用来获取,不需要对表进行访问】
Using temporary
MySQL需要使用临时表来处理,常见于排序、子查询和分组查询
Using where
需要在MySQL服务器层使用where条件来过滤数据
select tables optimized away
直接通过索引来获取数据,不用访问表
四、SQL索引失效
◦最左前缀原则:要求建立索引的一个列都不能缺失,否则会出现索引失效。
◦索引列上的计算,函数、类型转换(列类型是字符串在条件中需要使用引号,否则不走索引)、均会导致索引失效。
◦索引列中使用is not null会导致索引列失效。
◦索引列中使用like查询的前以%开头会导致索引列失效。
◦索引列用or连接时会导致索引失效。
五、实际优化慢SQL中遇到问题
下面是在慢SQL优化过程中所遇到的一些问题。
•MySQL查询到的数据排序是稳定的么?
•force_index的使用方式?
•为什么有时候order by id会导致索引失效?
•........未完整理中......
六、总结
通过本次对慢SQL的优化的需求进而发现有关SQL语句执行顺序、执行计划、索引失效场景、底层SQL语句执行原理相关知识还存在盲区,得益于此次需求的开发,有深入的对相关知识进行学习和总结。接下来会对SQL底层是如何执行SQL语句
你可能感兴趣的:(sql优化数据库)
图书管理数据库简单sql语句
空心木、
sql
已知某图书管理数据库有如下表格:用户表user、部门表dept、角色表role、图书表book、图书分类表book_classify、图书借阅表book_borrow、还书表book_return、借阅预约表book_appoint、图书遗失表book_lose;用户表user、部门表dept、角色表role、图书表book、图书分类表book_classify、图书借阅表book_borrow、
数据库高可用方案-09-数据库的灾难恢复演练
老马啸西风
database mysql 数据库 oracle
数据库数据高可用系列数据库高可用方案-01-数据库备份还原方案数据库高可用方案-02-多机房部署数据库高可用方案-03-主备等高可用架构数据库高可用方案-04-删除策略数据库高可用方案-05-备份与恢复数据库高可用方案-06-监控与报警数据库高可用方案-07-一致性校验数据库高可用方案-08-多版本管理数据库高可用方案-09-数据库的灾难恢复演练数据库的灾难恢复演练数据库的灾难恢复演练是确保数据库
数据库高可用方案-05-备份与恢复
老马啸西风
database mysql 数据库 oracle
数据库数据高可用系列数据库高可用方案-01-数据库备份还原方案数据库高可用方案-02-多机房部署数据库高可用方案-03-主备等高可用架构数据库高可用方案-04-删除策略数据库高可用方案-05-备份与恢复数据库高可用方案-06-监控与报警数据库高可用方案-07-一致性校验数据库高可用方案-08-多版本管理数据库高可用方案-09-数据库的灾难恢复演练数据库的备份与恢复数据库备份与恢复是数据库管理中至关
数据库高可用方案-07-一致性校验
老马啸西风
database mysql 数据库 oracle
数据库数据高可用系列数据库高可用方案-01-数据库备份还原方案数据库高可用方案-02-多机房部署数据库高可用方案-03-主备等高可用架构数据库高可用方案-04-删除策略数据库高可用方案-05-备份与恢复数据库高可用方案-06-监控与报警数据库高可用方案-07-一致性校验数据库高可用方案-08-多版本管理数据库高可用方案-09-数据库的灾难恢复演练数据库的数据一致性校验数据库的数据一致性校验是指确保
数据库高可用方案-03-主备等高可用架构
老马啸西风
database mysql 数据库 架构
数据库数据高可用系列数据库高可用方案-01-数据库备份还原方案数据库高可用方案-02-多机房部署数据库高可用方案-03-主备等高可用架构数据库高可用方案-04-删除策略数据库高可用方案-05-备份与恢复数据库高可用方案-06-监控与报警数据库高可用方案-07-一致性校验数据库高可用方案-08-多版本管理数据库高可用方案-09-数据库的灾难恢复演练主备高可用架构主备高可用架构(Master-Slav
Python mysql数据库连接池
戴**
Python
最近在写一个Python的文本分析,需要大量的读取数据库(千万级别mysql)并进行更新操作,运行着程序发现一个问题,过了一会儿程序就报错说链接已经满了,或者是端口不可重复使用,因此我在网上找到了一个连接池的代码用于解决这个问题,在此处贴出代码本身是有配置文件的,因为我觉得在我的项目中不必要所以就删除了#!/usr/bin/envpython#-*-coding:utf-8-*-importpym
深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna)
m0_74823983
开源 sql 人工智能
深入了解Text2SQL开源项目(Chat2DB、SQLChat、WrenAI、Vanna)前言1.Chat2DB2.SQLChat3.WrenAI4.Vanna前言在数据驱动决策的时代,将自然语言查询转化为结构化查询语言(SQL)的能力变得日益重要。无论是小型创业公司还是大型企业,都希望能够更轻松地从海量的数据中挖掘出有价值的见解。然而,对于那些不熟悉SQL或者数据库架构的用户来说,直接编写复杂
应学短视频App数据库表设计文档
2401_89285805
数据库
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:||1|id|int|10|0|N|Y||||2|username|varchar|20|0|N|N||||3|password|varchar|20|0|N|N|||ROPTABLEIFEXISTSadmin;CREATETABLEadmin(idintNOTNULLAUTO_INCREMENT,usernamevarcha
Mysql数据库和Sql语句
Jessica小戴
数据库 mysql sql
数据库管理:sql语句:数据库用来增删改查的语句(重要)备份:数据库的数据进行备份主从复制、读写分离、高可用(重要)Mysql数据库和Sql语句一、Mysql数据库1、数据库:组织、存储、管理数据的仓库2、数据库的管理系统(DBMS):实现对数据有效组织、管理和存取的系统软件3、数据库软件:mysql、oracle(大数据系统一般使用、大企业使用)、sql-server、MariaDB也是mysq
数据库管理语句分类
旦沐已成舟
数据库的日子 数据库
1.SQL语句概述它是一种对关系型数据库中的数据进行定义和操作的语言,是大多数关系数据库管理系统所支持的工业标准语言。1.2SQL语句的分类分类说明涉及语句DDL数据定义语言create(创建),alter(修改),delete(删除)等DCL数据控制语言grant(授权),revoke(权限回收),commit(提交),rollback(回滚)DML数据操作语言insert,delete,upd
【计算机视觉】人脸识别
油泼辣子多加
计算机视觉 计算机视觉 opencv 人工智能
一、简介人脸识别是将图像或者视频帧中的人脸与数据库中的人脸进行对比,判断输入人脸是否与数据库中的某一张人脸匹配,即判断输入人脸是谁或者判断输入人脸是否是数据库中的某个人。人脸识别属于1:N的比对,输入人脸身份是1,数据库人脸身份数量为N,一般应用在办公室门禁,疑犯追踪;人脸验证属于1:1的比对,输入人脸身份为1,数据库中为同一人的数据,在安全领域应用比较多。一个完整的人脸识别流程主要包括人脸检测、
NAT静态原理NAT动态原理NAPT原理
aicc221016
计算机网络 网络 智能路由器
现网:环境dev开发环境,开发专用sit:测试环境。测试人员用的,需要的测试的代码,程序之类的都会在测试环境运行。pre:预生产环境。在版本最后上线之前会在预生产最后执行一遍。确保万无一失(狗头)运维,也有测试。prd:生产环境/现网:10运维人员。数据库3DBA数据库运维。100.00129.9999991201361.36私网访问公网的过程:百度192.168.233.10(主机ip)180.
家政招聘管理系统的设计与实现
詹姆斯爱研究Java
spring spring boot
摘要随着互联网技术的发展,搭建一个满足每个家庭对家政服务需求的人性化管理系统,不仅能为客户提供更广的查询求职者信息的服务,也为求职者提供了方便、快捷的应聘途径。求职者和招聘者可以在网上进行交流,招聘者和求职者也可以在系统中上传自己的要求和优势,不受时间可空间的局限。网上招聘与传统招聘相比范围更广,资源更丰富,可挑选机会多等优点。我的系统主要用Java编程语言和Oracle数据库作为基础开发的平台,
MPP(Massively Parallel Processing,大规模并行处理)架构
唯心-fja
架构
MPP(MassivelyParallelProcessing,大规模并行处理)架构是一种数据库系统的设计模式,它允许数据处理任务在多个计算节点上并行执行。这种架构非常适合处理大规模数据集和执行复杂的查询操作。下面是一些关于MPP架构的关键概念和特点:MPP架构的特点并行处理:MPP架构的核心优势在于能够将数据处理任务分解并在多个节点上并行执行。每个节点都有自己的处理器、内存和本地存储,可以独立执
gaussdb大表查询性能慢的解决思路
_Evelyn
大数据 gaussdb
一、引言1.背景介绍数字化和智能化转型是经济发展的新动力。而面对国外对中国数据库市场的长期垄断,人们对于中国自研数据库的需求越来越普遍,高斯数据库成为许多企业的选择之一。在经营分析5G智慧加油站项目项目中,我接触到高斯数据库,并使用它来进行数据的存储和查询。高斯数据库是以PostgreSQL为内核进行开发的一款数据库产品,其具备了PostgreSQL的高并发特性,又具有很强的通用性,支持行和列两种
gds文件 导出_GaussDB 200使用GDS服务导入导出数据
weixin_39576066
gds文件 导出
GaussDB200支持将存在远端服务器上的TEXT、CSV和FIXED格式的数据导入到集群中。本文介绍使用GDS(GaussDataService)工具将远端服务器上的数据导入GaussDB200。环境如下表:1、准备源数据这里从PostgreSQL数据库中,使用copy命令导出一个csv格式的文件,如下:rhnschema=>copyrhnpackagefileto'/tmp/rhnpacka
mysql 用户名 命名_MySQL命名、设计及使用规范《MySQL命名、设计及使用规范》
syzyzs
mysql 用户名 命名
数据库环境dev:开发环境,开发可读写,可修改表结构。开发人员可以修改表结构,可以随意修改其中的数据但是需要保证不影响其他开发同事。qa:测试环境,开发可读写,开发人员可以通过工具修改表结构。sim:模拟环境,开发可读写,发起上线请求时,会先在这个环境上进行预执行,这个环境也可供部署上线演练或压力测试使用。real:生产数据库从库(准实时同步),只读环境,不允许修改数据,不允许修改表结构,供线上问
基于mybatis-plus实现的多租户架构
叔叔很忙
java spring
整体概述多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性。多租户在数据存储上主要存在三种方案,独立数据库、共享数据库,独立Schema、共享数据库,共享Schema,共享数据表。独立数据库即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高。优点:为不同
MPP-大规模并行处理
quanzaiwoxin1
1、什么是MPP?MPP(MassivelyParallelProcessing),即大规模并行处理,在数据库非共享集群中,每个节点都有独立的磁盘存储系统和内存系统,业务数据根据数据库模型和应用特点划分到各个节点上,每台数据节点通过专用网络或者商业通用网络互相连接,彼此协同计算,作为整体提供数据库服务。非共享数据库集群有完全的可伸缩性、高可用、高性能、优秀的性价比、资源共享等优势。简单来说,MPP
后端学习1.4: Mybatis-plus配置多租户
Congee_porridge
后端开发学习 mybatis java spring boot 后端
功能要求Mybatis-plus配置多租户。从header中的token获取租户信息;所有userController的数据库操作*不要*配置多租户,所有工作计划相关的数据库操作*需要*配置多租户,达成数据隔离。开发工具:IDEA技术:Springboot+MabtisPlus+Postman1、什么是多租户?多租户技术(多重租赁技术,简称saas),是一种软件架构技术;可以实现同一套程序下用户数
深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架
m0_74823595
.net
SQLSugar是一个高效、易用的.NETORM框架,支持多种数据库(如SQLServer、MySQL、PostgreSQL等)。它提供了丰富的功能,包括CRUD操作、事务管理、动态表名、多表联查等,开发者可以通过简单的链式操作实现复杂的数据库逻辑。本文将以完整的示例,详细介绍SQLSugar的安装、配置和功能使用,适用于.NETFramework和.NETCore项目。一、SQLSugar简介1
足球俱乐部管理系统(11293)
codercode2022
spring boot spring cloud 后端 hibernate 架构 laravel actionscript
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发
【python自动化运维】python第三方运维模块应用
leo__programmer
python自动化运维 运维 python 自动化
一、pymysql模块——数据库编程1、介绍第三方模块作用:连接MySQL数据库1.1、操作流程创建数据库连接基于连接创建游标cursor数据库读写操作关闭游标关闭数据库连接2、pymysql模块的使用2.1、准备工作准备MySQL数据库安装pymysql模块pipinstallpymysql安装配置MySQL数据库[root@localhost~]#yuminstall-ymariadb-ser
GaussDB数据库SQL系列-LOCK TABLE
关沵什么柿
数据库 gaussdb sql
一、前言GaussDB是一款高性能、高可用的分布式数据库,广泛应用于各类行业和场景。在GaussDB中,锁是实现并发控制的关键机制之一,用于协调多个事务之间的数据访问,确保数据的一致性和完整性。本文将围绕GaussDB数据库的LOCKTABLE做一简单介绍。二、GaussDB数据库的锁GaussDB提供了多种锁模式用于控制对表中数据的并发访问。这些模式可以用在MVCC(多版本并发控制)无法给出期望
MySQL面试题 2024 金九银十 最新 C# 高级 资深 DB 八股文
云草桑
.net 面试 sql 数据库 mysql sql net c#
最新mysql八股文chatgpt都能回答的问题,就没必要螺丝是往那边扭了。目录一、数据库知识(通用)篇1.说说drop、truncate、delete区别2.说说主键、外键、超键、候选键3.varchar和char的使用场景?4.什么叫视图?游标是什么?5.说说like%和-的区别6.为什么用自增列作为主键?7.说说非关系型数据库和关系型数据库区别,优势比较?8.说说存储过程的优缺点?9.什么是
基于JAVA水果商城设计计算机毕业设计源码+数据库+lw文档+系统+部署
柳下网络
java 开发语言 jvm
基于JAVA水果商城设计计算机毕业设计源码+数据库+lw文档+系统+部署基于JAVA水果商城设计计算机毕业设计源码+数据库+lw文档+系统+部署本源码技术栈:项目架构:B/S架构开发语言:Java语言开发软件:ideaeclipse前端技术:Layui、HTML、CSS、JS、JQuery等技术后端技术:JAVA运行环境:Win10、JDK1.8数据库:MySQL5.7/8.0源码地址:https
GBase 8c 教程(十六)VACUUM指令
唤溪
GBase 8c 数据库 database
GBase8c数据库需要周期性的清理维护以达到最优的性能,清理维护工作可以通过自动清理守护进程或手动管理VACUUM命令来进行。一、VACUUM命令基础建议使用VACUUM命令定期对GBase8c数据库的表进行清理,主要有以下几个原因:恢复或重用被已更新或已删除行所占用的磁盘空间;更新被查询规划器使用的数据统计信息;更新可见性映射,它可以加速只用索引的扫描;保护老旧数据不会由于事务ID回卷或多事务
MySQL 基础篇
睫毛进眼睛了!
SQL mysql
文章目录MySQL基础篇1.数据库概述1.1.表、记录、字段1.2.表的关联关系1.2.1.一对一关联(one-to-one)1.2.2.一对多关联(ont-to-many)1.2.3.多对多关联(mant-to-many)2.SQL之SELECT2.1.基本规则2.2.基本语法2.3.运算符2.3.1.算术运算符2.3.2.比较运算符2.3.3.逻辑运算符2.3.4.位运算符2.3.5.运算符优
Windchill配置-数据库相关的基础操作
这城有海
系统配置 Windchill二开 数据库
数据库相关的基础操作一、数据库访问1.1访问方式1.2数据库服务器1.2.1Windows/Linux1.2.2监听相关命令1.2.3进入sqlplus的方式1.2.4基础SQL命令二、常用的SQL语句2.1数据库表空间使用情况查询2.1.1统计2.1.2明细2.2数据库表空间扩容2.2.1单机环境2.2.2集群环境(OracleRAC)2.3游标查询2.3.1查询最大游标数和最大打开游标数2.3
深入理解检查约束:确保数据质量的重要工具
title:深入理解检查约束:确保数据质量的重要工具date:2025/1/20updated:2025/1/20author:cmdragonexcerpt:在数据库管理中,检查约束是一种重要的约束类型,用于确保表中某一列或某些列的数据符合特定条件,从而维护数据的有效性和一致性。检查约束通过对数据的有效性进行验证,防止无效或不合逻辑的数据进入数据库。categories:前端开发tags:检查约
312个免费高速HTTP代理IP(能隐藏自己真实IP地址)
yangshangchuan
高速 免费 superword HTTP代理
124.88.67.20:843
190.36.223.93:8080
117.147.221.38:8123
122.228.92.103:3128
183.247.211.159:8123
124.88.67.35:81
112.18.51.167:8123
218.28.96.39:3128
49.94.160.198:3128
183.20
pull解析和json编码
百合不是茶
android pull解析 json
n.json文件:
[{name:java,lan:c++,age:17},{name:android,lan:java,age:8}]
pull.xml文件
<?xml version="1.0" encoding="utf-8"?>
<stu>
<name>java
[能源与矿产]石油与地球生态系统
comsci
能源
按照苏联的科学界的说法,石油并非是远古的生物残骸的演变产物,而是一种可以由某些特殊地质结构和物理条件生产出来的东西,也就是说,石油是可以自增长的....
那么我们做一个猜想: 石油好像是地球的体液,我们地球具有自动产生石油的某种机制,只要我们不过量开采石油,并保护好
类与对象浅谈
沐刃青蛟
java 基础
类,字面理解,便是同一种事物的总称,比如人类,是对世界上所有人的一个总称。而对象,便是类的具体化,实例化,是一个具体事物,比如张飞这个人,就是人类的一个对象。但要注意的是:张飞这个人是对象,而不是张飞,张飞只是他这个人的名字,是他的属性而已。而一个类中包含了属性和方法这两兄弟,他们分别用来描述对象的行为和性质(感觉应该是
新站开始被收录后,我们应该做什么?
IT独行者
PHP seo
新站开始被收录后,我们应该做什么?
百度终于开始收录自己的网站了,作为站长,你是不是觉得那一刻很有成就感呢,同时,你是不是又很茫然,不知道下一步该做什么了?至少我当初就是这样,在这里和大家一份分享一下新站收录后,我们要做哪些工作。
至于如何让百度快速收录自己的网站,可以参考我之前的帖子《新站让百
oracle 连接碰到的问题
文强chu
oracle
Unable to find a java Virtual Machine--安装64位版Oracle11gR2后无法启动SQLDeveloper的解决方案
作者:草根IT网 来源:未知 人气:813标签:
导读:安装64位版Oracle11gR2后发现启动SQLDeveloper时弹出配置java.exe的路径,找到Oracle自带java.exe后产生的路径“C:\app\用户名\prod
Swing中按ctrl键同时移动鼠标拖动组件(类中多借口共享同一数据)
小桔子
java 继承 swing 接口 监听
都知道java中类只能单继承,但可以实现多个接口,但我发现实现多个接口之后,多个接口却不能共享同一个数据,应用开发中想实现:当用户按着ctrl键时,可以用鼠标点击拖动组件,比如说文本框。
编写一个监听实现KeyListener,NouseListener,MouseMotionListener三个接口,重写方法。定义一个全局变量boolea
linux常用的命令
aichenglong
linux 常用命令
1 startx切换到图形化界面
2 man命令:查看帮助信息
man 需要查看的命令,man命令提供了大量的帮助信息,一般可以分成4个部分
name:对命令的简单说明
synopsis:命令的使用格式说明
description:命令的详细说明信息
options:命令的各项说明
3 date:显示时间
语法:date [OPTION]... [+FORMAT]
eclipse内存优化
AILIKES
java eclipse jvm jdk
一 基本说明 在JVM中,总体上分2块内存区,默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。 1)堆内存(Heap memory):堆是运行时数据区域,所有类实例和数组的内存均从此处分配,是Java代码可及的内存,是留给开发人
关键字的使用探讨
百合不是茶
关键字
//关键字的使用探讨/*访问关键词private 只能在本类中访问public 只能在本工程中访问protected 只能在包中和子类中访问默认的 只能在包中访问*//*final 类 方法 变量 final 类 不能被继承 final 方法 不能被子类覆盖,但可以继承 final 变量 只能有一次赋值,赋值后不能改变 final 不能用来修饰构造方法*///this()
JS中定义对象的几种方式
bijian1013
js
1. 基于已有对象扩充其对象和方法(只适合于临时的生成一个对象):
<html>
<head>
<title>基于已有对象扩充其对象和方法(只适合于临时的生成一个对象)</title>
</head>
<script>
var obj = new Object();
表驱动法实例
bijian1013
java 表驱动法 TDD
获得月的天数是典型的直接访问驱动表方式的实例,下面我们来展示一下:
MonthDaysTest.java
package com.study.test;
import org.junit.Assert;
import org.junit.Test;
import com.study.MonthDays;
public class MonthDaysTest {
@T
LInux启停重启常用服务器的脚本
bit1129
linux
启动,停止和重启常用服务器的Bash脚本,对于每个服务器,需要根据实际的安装路径做相应的修改
#! /bin/bash
Servers=(Apache2, Nginx, Resin, Tomcat, Couchbase, SVN, ActiveMQ, Mongo);
Ops=(Start, Stop, Restart);
currentDir=$(pwd);
echo
【HBase六】REST操作HBase
bit1129
hbase
HBase提供了REST风格的服务方便查看HBase集群的信息,以及执行增删改查操作
1. 启动和停止HBase REST 服务 1.1 启动REST服务
前台启动(默认端口号8080)
[hadoop@hadoop bin]$ ./hbase rest start
后台启动
hbase-daemon.sh start rest
启动时指定
大话zabbix 3.0设计假设
ronin47
What’s new in Zabbix 2.0?
去年开始使用Zabbix的时候,是1.8.X的版本,今年Zabbix已经跨入了2.0的时代。看了2.0的release notes,和performance相关的有下面几个:
:: Performance improvements::Trigger related da
http错误码大全
byalias
http协议 javaweb
响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。
响应码分五种类型,由它们的第一位数字表示:
1)1xx:信息,请求收到,继续处理
2)2xx:成功,行为被成功地接受、理解和采纳
3)3xx:重定向,为了完成请求,必须进一步执行的动作
4)4xx:客户端错误,请求包含语法错误或者请求无法实现
5)5xx:服务器错误,服务器不能实现一种明显无效的请求
J2EE设计模式-Intercepting Filter
bylijinnan
java 设计模式 数据结构
Intercepting Filter类似于职责链模式
有两种实现
其中一种是Filter之间没有联系,全部Filter都存放在FilterChain中,由FilterChain来有序或无序地把把所有Filter调用一遍。没有用到链表这种数据结构。示例如下:
package com.ljn.filter.custom;
import java.util.ArrayList;
修改jboss端口
chicony
jboss
修改jboss端口
%JBOSS_HOME%\server\{服务实例名}\conf\bindingservice.beans\META-INF\bindings-jboss-beans.xml
中找到
<!-- The ports-default bindings are obtained by taking the base bindin
c++ 用类模版实现数组类
CrazyMizzz
C++
最近c++学到数组类,写了代码将他实现,基本具有vector类的功能
#include<iostream>
#include<string>
#include<cassert>
using namespace std;
template<class T>
class Array
{
public:
//构造函数
hadoop dfs.datanode.du.reserved 预留空间配置方法
daizj
hadoop 预留空间
对于datanode配置预留空间的方法 为:在hdfs-site.xml添加如下配置
<property>
<name>dfs.datanode.du.reserved</name>
<value>10737418240</value>
 
mysql远程访问的设置
dcj3sjt126com
mysql 防火墙
第一步: 激活网络设置 你需要编辑mysql配置文件my.cnf. 通常状况,my.cnf放置于在以下目录: /etc/mysql/my.cnf (Debian linux) /etc/my.cnf (Red Hat Linux/Fedora Linux) /var/db/mysql/my.cnf (FreeBSD) 然后用vi编辑my.cnf,修改内容从以下行: [mysqld] 你所需要: 1
ios 使用特定的popToViewController返回到相应的Controller
dcj3sjt126com
controller
1、取navigationCtroller中的Controllers
NSArray * ctrlArray = self.navigationController.viewControllers;
2、取出后,执行,
[self.navigationController popToViewController:[ctrlArray objectAtIndex:0] animated:YES
Linux正则表达式和通配符的区别
eksliang
正则表达式 通配符和正则表达式的区别 通配符
转载请出自出处:http://eksliang.iteye.com/blog/1976579
首先得明白二者是截然不同的
通配符只能用在shell命令中,用来处理字符串的的匹配。
判断一个命令是否为bash shell(linux 默认的shell)的内置命令
type -t commad
返回结果含义
file 表示为外部命令
alias 表示该
Ubuntu Mysql Install and CONF
gengzg
Install
http://www.navicat.com.cn/download/navicat-for-mysql
Step1: 下载Navicat ,网址:http://www.navicat.com/en/download/download.html
Step2:进入下载目录,解压压缩包:tar -zxvf navicat11_mysql_en.tar.gz
批处理,删除文件bat
huqiji
windows dos
@echo off
::演示:删除指定路径下指定天数之前(以文件名中包含的日期字符串为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例假设文件名中包含的日期字符串(比如:bak-2009-12-25.log)
rem 指定待删除文件的存放路径
set SrcDir=C:/Test/BatHome
rem 指定天数
set DaysAgo=1
跨浏览器兼容的HTML5视频音频播放器
天梯梦
html5
HTML5的video和audio标签是用来在网页中加入视频和音频的标签,在支持html5的浏览器中不需要预先加载Adobe Flash浏览器插件就能轻松快速的播放视频和音频文件。而html5media.js可以在不支持html5的浏览器上使video和audio标签生效。 How to enable <video> and <audio> tags in
Bundle自定义数据传递
hm4123660
android Serializable 自定义数据传递 Bundle Parcelable
我们都知道Bundle可能过put****()方法添加各种基本类型的数据,Intent也可以通过putExtras(Bundle)将数据添加进去,然后通过startActivity()跳到下一下Activity的时候就把数据也传到下一个Activity了。如传递一个字符串到下一个Activity
把数据放到Intent
C#:异步编程和线程的使用(.NET 4.5 )
powertoolsteam
.net 线程 C# 异步编程
异步编程和线程处理是并发或并行编程非常重要的功能特征。为了实现异步编程,可使用线程也可以不用。将异步与线程同时讲,将有助于我们更好的理解它们的特征。
本文中涉及关键知识点
1. 异步编程
2. 线程的使用
3. 基于任务的异步模式
4. 并行编程
5. 总结
异步编程
什么是异步操作?异步操作是指某些操作能够独立运行,不依赖主流程或主其他处理流程。通常情况下,C#程序
spark 查看 job history 日志
Stark_Summer
日志 spark history job
SPARK_HOME/conf 下:
spark-defaults.conf 增加如下内容
spark.eventLog.enabled true spark.eventLog.dir hdfs://master:8020/var/log/spark spark.eventLog.compress true
spark-env.sh 增加如下内容
export SP
SSH框架搭建
wangxiukai2015eye
spring Hibernate struts
MyEclipse搭建SSH框架 Struts Spring Hibernate
1、new一个web project。
2、右键项目,为项目添加Struts支持。
选择Struts2 Core Libraries -<MyEclipes-Library>
点击Finish。src目录下多了struts