![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
文章平均质量分 55
zhangzeyuaaa
这个作者很懒,什么都没留下…
展开
-
Mysql五百万数据count(*)优化
如果不存在二级索引,那么会走主键索引;聚簇索引:每一个 InnoDB 存储引擎下的表都有一个特殊的索引用来保存每一行的数据,称为聚簇索引(通常都为主键),聚簇索引实际保存了 B-Tree 索引和行数据,所以大小实际上约等于为表数据量。这里我们由于走的是主键索引,所以 MySQL 需要先把整个主键索引读取到内存缓冲区,这是个从磁盘读写到内存的过程,而且主键索引基本等于整个表数据量(10GB+),所以非常耗时!二级索引:除了聚集索引,表上其他的索引都是二级索引,索引中仅仅存储了对应索引列及主键列。转载 2024-05-21 10:49:41 · 278 阅读 · 0 评论 -
mysql 数百万数据使用 count(*)查询太慢解决记录
最后加上了一个where id >= 0 的条件,查询时间为三秒。给test库的user表的id建立二级索引,过程可能慢一点。此时执行以下两条SQL语句发现速度依旧的慢,32秒。user表中数据有700W条。转载 2024-05-21 09:48:58 · 365 阅读 · 0 评论 -
Mysql8.0修改配置文件my.ini的坑
出现的问题:一般直接双击打开my.ini文件默认会用系统自带的记事本打开,如果打开后修改了其中的内容并通过记事本直接保存的话,下次重启就会导致mysql无法启动。解决办法:使用notepad++打开my.ini文件,选择使用ANSI编码,然后再保存。原因是mysql会以ANSI编码读取my.ini文件。原创 2024-05-11 17:27:02 · 410 阅读 · 0 评论 -
Sql server强制走索引
遇到一个奇怪的问题,同样的SQL,只是一个where条件不一样,一个是column1 = 'AAA',一个是column1 = 'BBB',他们的查询效率却差距甚大,一个要60秒,一个1秒以下。查看查询计划,一个使用了索引,一个没有使用索引。如果强制使用索引,可能会导致选择不合适的执行计划,从而降低查询性能。因为索引强制是通过创建索引视图来实现的,而索引视图只保存了特定的索引列。只有在确定查询优化器选择的执行计划不合适,并且经过测试证明使用索引可以提高查询性能的情况下,才应该强制使用索引。原创 2024-01-24 09:46:48 · 1018 阅读 · 0 评论 -
MySql编码设置
配置后重启mysql服务。原创 2024-01-16 15:06:48 · 419 阅读 · 0 评论 -
SQLServer数据库选择性快速删除大量数据千万亿级方法
【代码】SQLServer数据库选择性快速删除大量数据千万亿级方法。转载 2023-05-31 16:11:00 · 1796 阅读 · 0 评论 -
SQLServer数据库查看执行超过30秒的慢SQL
提示:该SQL执行需要VIEW SERVER STATE权限。转载 2023-05-31 16:08:50 · 662 阅读 · 0 评论 -
SqlServer表关联更新
在实际工作中,我们经常需要对多个表进行关联更新,以保持数据的一致性。原创 2023-04-11 23:17:13 · 939 阅读 · 1 评论 -
分布式事务解决方案之本地消息表
描述分布式事务之前,先了解下事务是什么。事务就是一组操作构成的可靠的独立的工作单元,要么全部执行成功,要么全部执行失败。分布式就是一个业务由多个操作完成,这些操作又分布在不同的服务器上。简单来说,分布式事务就是分布式系统中的事务。本文描述了本地消息表如何解决分布式事务的关键流程,在具体业务操作时候,可能还有会一些问题,比如消息发送失败、下游业务处理失败等问题,这些都需要具体问题具体分析。在遇到分布式一致性问题的时候,结合实际的业务情况选择最适合的分布式事务解决方案。转载 2022-09-27 10:51:25 · 4275 阅读 · 0 评论 -
SQL中的开窗函数over()
上面我们额外介绍了聚合函数和排序函数的与OVER结合的使用方法,此外还有很多与OVER一起使用的函数,比如LEAD函数,LAG函数,STRING_AGG函数等等都会使用到开窗函数OVER,其使用方法也要务必掌握。ROW_NUMBER()是排序,当存在相同成绩的学生时,ROW_NUMBER()会依次进行排序,他们序号不相同,而Rank()则不一样。RANK()是1-1-3-3-5-6,而ROW_NUMBER()则还是1-2-3-4-5-6,这就是RANK()和ROW_NUMBER()的区别了。...转载 2022-07-30 17:41:56 · 3562 阅读 · 1 评论 -
不要用把无序GUID既作为主键又作为聚集索引
我一直想当然的认为用GUID做主键没什么大不了,不就是比int多了12位而已吗?而且现在都是SQL Server 2008, 2012时代了,应该更不是问题了吧?而且微软很多项目也是用GUID做主键啊?Sharepoint, ASP.NET SQL Server Membership Provider默认的表等等。而且还有许多而且......果真这样吗?直到我读了这两篇文章后GUIDs as PRIMARY KEYs and/or the clustering key和THAT'S NOT THE ..转载 2021-12-23 09:45:10 · 546 阅读 · 0 评论 -
SQL SERVER下有序GUID和无序GUID作为主键&聚集索引的性能表现
背景 前段时间学习《Microsoft SQL Server 2008技术内幕:T-SQL查询》时,看到里面关于无序GUID作为主键与聚集索引的建议,无序GUID作为主键以及作为聚集索引所带来的问题包括:空间的浪费以及由此带来的读写效率的下降。 更主要的,存储的碎片化(fragmentation)以及由此带来的读写效率严重下降。所以,尽量避免用GUID(无序或有序)做主键,不要用无序GUID做聚集索引。<摘自博友博客> 想到在工作中存在一个视图转成物理表的时候使用到了此种场景.转载 2021-12-23 09:42:41 · 1569 阅读 · 0 评论 -
记一次索引碎片引起的性能问题
最近公司项目做压测(查询请求),100个并发,发现条件发布时间(publishtime)不同,测试结果不一样:AND t.publishtime >= '2021-12-05 00:00:00' AND t.publishtime <= '2021-12-19 23:59:59'100个并发平均耗时要20多秒,但是:AND t.publishtime >= '2021-11-05 00:00:00' AND t.publishtime <= '2021-12-1.原创 2021-12-23 09:30:27 · 546 阅读 · 0 评论 -
数据库分库分表后”跨库分页“查询方案
分库需求(数据库分库分表解决方案)高并发大流量的互联网架构,一般通过服务层来访问数据库,随着数据量的增大,数据库需要进行水平切分,分库后将数据分布到不同的数据库实例(甚至物理机器)上,以达到降低数据量,增加实例数的扩容目的。分页需求互联网很多业务都有分页拉取数据的需求,例如:(1)微信消息过多时,拉取第N页消息(2)京东下单过多时,拉取第N页订单(3)浏览58同城,查看第N页帖子这些业务场景对应的消息表,订单表,帖子表分页拉取需求有这样一些特点:(1)有一个业务主键id, 例..转载 2021-10-16 16:48:47 · 5019 阅读 · 4 评论 -
分库后如何解决不能JOIN的问题
在拆分之前,系统中很多列表和详情页所需的数据是可以通过sql join来完成的。而拆分后,数据库可能是分布式在不同实例和不同的主机上,join将变得非常麻烦。而且基于架构规范,性能,安全性等方面考虑,一般是禁止跨库join的。那该怎么办呢?有以下几种解决方案:1.全局表所谓全局表,就是有可能系统中所有模块都可能会依赖到的一些表。比较类似我们理解的“数据字典”。为了避免跨库join查询,我们可以将这类表在其他每个数据库中均保存一份。同时,这类数据通常也很少发生修改(甚至几乎不会),所以也不用太担心“一原创 2021-09-24 15:21:54 · 1635 阅读 · 0 评论 -
浅谈分库分表那些事儿
本文主要阐述在分库分表改造过程中需要考虑的因素以及对应的解法,还有踩过的那些坑。一 前言我们既然要做分库分表,那总要有个做事的动机。那么,在动手之前,首先就要弄明白下面两个问题。1 什么是分库分表?其实就是字面意思,很好理解: 分库:从单个数据库拆分成多个数据库的过程,将数据散落在多个数据库中。 分表:从单张表拆分成多张表的过程,将数据散落在多张表内。 2 为什么要分库分表?关键字:提升性能、增加可用性。从性能上看随着单库中的数据量越来越大、数据库的查询...转载 2021-09-24 14:09:32 · 250 阅读 · 0 评论 -
关于数据库冗余字段的几点思考
创建冗余字段的目的有两个:1.避免连表查询;2.保存历史快照。保存历史快照(比如订单表的单价)不存在数据一致性问题,所以无需过多讨论。因避免连表查询而创建的冗余字段,如果冗余字段可能会修改,则存在数据一致性问题,需要同步数据。同步方案可参考:数据库冗余字段的同步策略和管理实际上为了避免连表查询,也不一定非要创建冗余字段。如果要冗余的字段只作为显示,而不作为查询条件,则可以不创建冗余字段,可以通过缓存解决。...原创 2021-09-24 13:22:50 · 1460 阅读 · 0 评论 -
数据库冗余字段的同步策略和管理
冗余字段的使用在多表联合查询都是大数据量的表的情况下,确实是个不错的选择,有效的减少了IO操作。但结合已有的项目产品来看,冗余字段确实是双刃剑。尤其是大项目的开发,如果忽略某个表的冗余字段的更新,那么后果是灾难性的。如何有效的管理冗余字段是开发组内必须解决的问题。我的解决方案是:使用专门的表来管理冗余字段。例如article表有以下冗余字段fromUserName,toUserName如何管理这两个字段呢?通过建立一个表,表结构如下id,objTable,objName,sourceTable,转载 2021-09-24 13:20:20 · 2213 阅读 · 0 评论 -
jdbc批量插入实现大批量数据快速插入
今天在做一个将excel数据导入数据库的程序时,由于数据量大,准备采用jdbc的批量插入。于是用了preparedStatement.addBatch();当加入1w条数据时,再执行插入操作,preparedStatement.executeBatch()。我原以为这样会很快,结果插入65536条数据一共花30多分钟,完全出乎我的意料。于是问了一下同事,他们在处理这种大批量数据导入的时候是如何处理的,发现他们也是用的jdbc批量插入处理,但与我不同是:他们使用了con.setAutoCommit(false转载 2021-05-07 20:20:41 · 1683 阅读 · 0 评论 -
以交易系统为例,看分布式事务架构的五大演进
一、概述在支付、交易、订单等强一致性系统中,我们需要使用分布式事务来保证各个数据库或各个系统之间的数据一致性。举个简单的例子来描述一下这里数据一致性的含义。程序员小张向女友小丽转账100人民币,转账过程是:先扣除小张100元,再为小丽的账户添加100元。如果在转帐过程中,扣款操作和打款操作要么同时执行,要么同时都不执行,我们就认为转帐过程保证了数据一致性。上面的例子中,如果我们不使用分布式来保证转账过程中数据的一致性,就有可能出现小张账户上的钱被扣除,而小丽...转载 2021-04-11 18:20:40 · 258 阅读 · 0 评论 -
如何使JDBC插入数据的时候返回自动增长的主键值
通常插入数据时的代码如下:...String sql = "insert into table (name) values(?)"; PreparedStatement pstmt = conn.prepareStatement(sql);// 如果使用静态的SQL,则不需要动态插入参数 pstmt.setString(1, name); pstmt.executeUpdate()...原创 2018-12-30 15:48:35 · 1943 阅读 · 0 评论 -
使用数据库连接池是否需要关闭Connection?
我们在平时项目中用到了数据库连接池,比如c3p0,dbcp,jndi...在使用结束的时候我们也要关闭连接。为什么呢。具体解释如下:使用 c3p0 的话,也是 java.sql.Connection,只要是 JDBC 连接都是这个接口的对象!使用完后必须 con.close() 掉 ,使用连接池的话,执行 con.close 并不会关闭与数据库的 TCP 连接,而是将连接还回到池中去,如果...转载 2018-12-16 00:02:46 · 19774 阅读 · 0 评论 -
JDBC postgresql大数据量流式读取
前言:最近做数据同步,需要从PostgreSql获取数据,发现一旦数据比较多,那么读取的速度非常慢,并且内存占用特别多&GC不掉。代码样例:为了方便讲解,下面写了事例代码,从b2c_order获取数据,这个数据表6G左右。package com.synchro;import java.sql.*;/** * Created by qiu.li on 2转载 2018-02-04 14:23:01 · 6453 阅读 · 1 评论 -
JDBC mysql大数据量流式读取
总结下这周帮助客户解决报表生成操作的mysql 驱动的使用上的一些问题,与解决方案。由于生成报表逻辑要从数据库读取大量数据并在内存中加工处理后再生成大量的汇总数据然后写入到数据库。基本流程是 读取->处理->写入。读取操作开始遇到的问题是当sql查询数据量比较大时候基本读不出来。开始以为是server端处理太慢。但是在控制台是可以立即返回数据的。于是在应用这边抓包,发现也是发送sql后立即有数转载 2018-02-04 14:17:22 · 14026 阅读 · 0 评论 -
postgresql数据库创建、修改、删除
一、数据库创建语法:Command: CREATE DATABASEDescription: create a new databaseSyntax:CREATE DATABASE name [ [ WITH ] [ OWNER [=] user_name ] [ TEMPLATE [=] template ]转载 2017-09-12 17:11:27 · 5221 阅读 · 0 评论 -
Postgresql备份与迁移(恢复)
先切换到postgres用户下:su - postgres备份:pg_dump [database_name] > /home/postgres/db.dump 或者 db.sql恢复:psql [database_name]原创 2017-09-12 16:49:32 · 6688 阅读 · 1 评论 -
Oracle 导入、导出命令(imp/exp)
导出:Sql代码exp username/password@192.168.1.117/orcl file=本地存放数据库备份后的路径exp username/password@192.168.1.117/orcl file=本地存放数据库备份后的路径 导入:Sql代码imp username/password@192.168.1.117/orc原创 2017-09-12 15:56:48 · 759 阅读 · 0 评论 -
PostgreSQL客户端交互命令psql
一、命令说明 psql是PostgreSQL的交互终端,等同于Oracle中的sqlplus。执行该命令连接数据库时, 默认的用户和数据库是postgres 二、命令参数 -c 命令 :指定psql执行一条SQL命令(用双引号括起),执行后退出。 -d 数据库名 :待连接的数据库名称。 -f 文件名 :使用文件中的数据作为命令的输原创 2017-09-12 15:31:51 · 2460 阅读 · 0 评论 -
postgresql 使用\c 命令切换数据库和用户
命令格式:切换数据库:\c [database_name]切换用户:\c - [user_name]先连上用户postgres、数据库postgres$ su - postgresLast login: Wed Mar 1 13:16:48 CST 2017 on pts/1-bash-4.2$ psqlpsql (9.2.18)Type "help"原创 2017-09-12 12:35:17 · 40699 阅读 · 3 评论 -
postgresql中的search_path
search_path类似于linux中的path环境变量。postgres=# show search_path; search_path ----------------- "$user", public(1 row)默认值是$user,public,意思就是当以某个用户登录到数据库的时候,默认就是先查找和登录用户同名的schema,再查找public。修改原创 2017-09-12 11:43:41 · 7935 阅读 · 0 评论 -
postgresql创建schema
schema概念有点像命名空间或者把它想像成一个文件系统中的目录,差别就是这个schema下不能再有schema嵌套.各个对象比如表、函数等存放在各个schema下,同一个schema下不能有重复的对象名字,但在不同schema下可以重复.使用schema的作用方便管理多个用户共享一个数据库,但是又可以互相独立.方便管理众多对象,更有逻辑性.方便兼容某些第三方应用程序,创建对象转载 2017-09-12 10:48:09 · 36431 阅读 · 1 评论 -
postgresql 查看数据库,表,索引,表空间以及大小
客户要求用pgsql,所在服务器装了一下pgsql,我出了一个pgsql的分类,看这篇文章前,把这个分类下的文章都可以看一下,这是我熟悉pgsql的一套流程。以前搞过一次pgsql,很早了。1,查看数据库查看复制打印?playboy=> \l //\加上字母l,相当于mysql的,mysql> show d转载 2017-09-12 09:23:51 · 3755 阅读 · 0 评论 -
命令行方式登录PostgreSQL、创建用户和数据库并赋权
目录: 一、在默认配置条件下,本机访问PostgreSQL 二、创建新用户来访问PostgreSQL 三、最简单的做法 四、开启远程访问 一、在默认配置条件下,本机访问PostgreSQL切换到Linux用户postgres,然后执行psql:$ su - postgresLast login: Wed Mar 1 1转载 2017-09-12 09:10:44 · 129632 阅读 · 4 评论 -
【SQL Server】可重复读隔离级别里的可能死锁
可重复读隔离级别里的可能死锁在今天的文章里我想谈论下在可重复读隔离级别(Transaction Isolation Level Repeatable Read)里,当你运行事务时可能引起的2类死锁。当你使用可重复读(Repeatable Read)隔离级别设置你的事务,SQL Server对读取数据把持需要的共享锁(Shared Locks)直到事务的结束(COMMIT或R转载 2017-05-22 00:30:30 · 1714 阅读 · 0 评论 -
【数据库设计】第一范式,第二范式,第三范式
第一范式存在非主属性对码的部分依赖关系 R(A,B,C) AB是码 C是非主属性 B-->C B决定C C部分依赖于B第一范式定义:如果关系R 中所有属性的值域都是单纯域,那么关系模式R是第一范式的那么符合第一模式的特点就有1)有主关键字2)主键不能为空,3)主键不能重复,4)字段不可以再分例如: StudyNo转载 2017-04-15 18:09:15 · 2786 阅读 · 0 评论 -
从分布式一致性谈到CAP理论、BASE理论
问题的提出在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景。1、火车站售票假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车票,然后拿着车票去检票口,再坐上火车,开始一段美好的旅行----一切似乎都是那么和谐。想象一下,如果他选择的目的地是杭州,而某一趟开往杭州的火车只剩下最后一张车票,可能在同一时刻,不同售票转载 2017-04-11 15:19:44 · 882 阅读 · 0 评论 -
数据库索引分类
1.直接创建索引和间接创建索引直接创建索引: CREATE INDEX mycolumn_index ON mytable (myclumn)间接创建索引:定义主键约束或者唯一性键约束,可以间接创建索引2.普通索引和唯一性索引普通索引:CREATE INDEX mycolumn_index ON mytable (myclumn)唯一性索引:保证在索引列中的全部数据是唯一的,对原创 2017-03-18 17:08:34 · 1036 阅读 · 0 评论 -
oracle explain plan for的用法
zzj@rac1>EXPLAIN PLAN FOR SELECT * FROM T_USER;Explained.zzj@rac1>SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);PLAN_TABLE_OUTPUT---------------------------------------------------------------------原创 2017-03-08 09:48:53 · 32173 阅读 · 0 评论 -
Oracle执行计划详解
简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容。 并有总结和概述,便于理解与记忆!+++目录--- 一.相关的概念 Rowid的概念 Recursive Sql概念 Predicate(谓词) DRiving Table(驱动表) Probed Ta转载 2017-03-08 09:43:39 · 675 阅读 · 0 评论 -
数据库优化---空间换时间优化
数据库优化---空间换时间优化在查询优化中,有一个重要的概念:空间换取查询时间这一理论最好的应用就是:数据仓库(OLAP):在海量数据库里(一般是TB级)分析数据,通过对数据的ETL和计算汇总,得到有用的数据,并通过不同维度查看统计数据(一般比较少),实现上钻和下钻分析数据。现在讨论一下在OLTP系统中空间换取查询时间常用的几个方法:1,增加冗余表(转载 2017-03-05 22:46:32 · 2734 阅读 · 0 评论