CSDN砖家
APP/网站/OA/CRM/ERP/小程序等定制开发
展开
-
数据库分库分表
Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个服务器上。如果表并不多,但每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规则(比如按ID散列)切分到多个数据库(server)上。根据实际情况做出选择,也可能会综合使用垂直与水平切分。原创 2023-03-09 15:36:40 · 5915 阅读 · 1 评论 -
Mybatis工作原理及流程
MyBatis介绍MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO(PlainOldJavaObjects,普通老式Java对象)为数据库中的记录。2、MyBatis架构图Application是程序员开发的Java代码,蓝色为MyBatis框架.API是MyBatis提供的增删改查等功能接口.原创 2023-03-03 09:14:06 · 7552 阅读 · 0 评论 -
教你写出高质量SQL(实践必备)
1、查询SQL尽量不要使用select * ,而是select具体字段。//反例子select * from sys_user;//正例子select id,name from sys_user;理由:只取需要的字段,节省资源、减少网络开销;select * 进行查询时,很可能就不会使用到覆盖索引,就会造成回表查询;覆盖索引:只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。例如:回表查询:先通过普通索引的值定位聚簇索引值,再通过聚簇索引的值定位行记..原创 2022-05-10 16:10:43 · 9565 阅读 · 0 评论 -
MySQL error code 145 :Table"XXX" was marked as crashed and should be repaired"快速修复
1、该错误产生原因: 第一、A程序执行了对 tableA 的 insert ,并还未 commite时,B程序也对tableA 进行insert 则此时会发生资源正忙的异常 就是锁表; 第二、锁表常发生于并发而不是并行(并行时,一个线程操作数据库时,另一个线程是不能操作数据库的,cpu 和i/o 分配原则)2、解决办法:然后在客户端的目标表上鼠标右键->维护->修复表...原创 2020-04-10 13:27:37 · 1866 阅读 · 0 评论 -
mysql锁表原因及解决方案
一、导致锁表的原因1、锁表发生在insert update 、delete 中 2、锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回滚 或者退出数据库用户3、锁表的原因 第一、 A程序执行了对 tableA 的 insert ,并还未 commite时,B程序也对tableA 进行insert 则此时会发生资源正忙的异...原创 2020-04-10 11:02:33 · 39156 阅读 · 1 评论 -
mysql数据库查询如何添加排名序号
mysql中排序后根据排序的内容显示序号,需要在子查询中select @rownum:=0,只有外层的@rownum并不会起作用。SELECT a.num, a.content, t.tagname, @rownum := @rownum + 1 AS sortorder FROM ( SELECT count( * ) AS num, content, @rownum := 0...原创 2019-12-30 09:56:01 · 1913 阅读 · 1 评论 -
CSDN---Mysql的B-Tree索引和Hash索引的区别。
hash索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不想B-Tree索引从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以hash索引的查询效率要远高于B-Tree索引。可能很多人会有疑问,既然hash索引的效率要高于B-Tree索引,为什么大家不用hash索引取代B-Tree索引呢?这是一个哲学命题,任何事物都有其两面性,hash索引也一样,虽然hash索引效率高...原创 2019-01-22 09:55:43 · 1877 阅读 · 0 评论 -
MySQL数据库优化
数据库优化建表优化1)数据库范式l第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。如电话列可进行拆分---家庭电话、公司电话l第二范式(2NF):首先是1NF,另外包含两部分内容,一是表必须有主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。l第三范式(3NF):首先是2NF,另外非主键列必须直接依赖于主...原创 2019-02-21 10:45:11 · 1324 阅读 · 0 评论 -
MySQL引擎、索引和优化
MySQL引擎、索引和优化(li)一、存储引擎 存储引擎,MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。InnoDB存储引擎是5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事...原创 2019-01-22 14:44:33 · 680 阅读 · 0 评论 -
MySQL大数据量分页查询方法及其优化
---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适应场景: 适用于数据量较少的情况(元组百/千级)---原因/缺点: 全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从结果集的M位置处取出N条输出,其余抛弃....原创 2019-01-29 16:40:09 · 1189 阅读 · 0 评论 -
mysql分库、分表解决方案
一、Mysql分库分表方案1.为什么要分表:当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据...原创 2019-01-30 16:03:40 · 2230 阅读 · 0 评论 -
MySQL的几种搜索引擎概述
前言数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在多种不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。存储引擎查看MySQL给开发者提供了查询存储引擎的功能,我在这里使用的是MySQL5.1,可...原创 2019-02-28 09:30:56 · 5069 阅读 · 1 评论 -
Mycat实现MySQL的分库分表、读写分离、主从切换
最近主要投入在平安云MySQL DRDS的项目中,本人主要负责zookeeper模块的配置及后台脚本的编写。为了加深对DRDS整体架构的认识,我觉得有必要手工搭建基于Mycat实现的Mysql分布式数据库集群,现和大家分享下搭建流程,后续会针对Mycat的各项配置作进一步研究,敬请期待。Mycat及MySQL实例部署情况:Mycat:IP:10.20.8.57,Port:3310/3311M...原创 2019-04-19 10:21:34 · 350 阅读 · 0 评论 -
我以为我对Mysql索引很了解,直到我遇到了阿里的面试官
本文来自一位不愿意透露姓名的粉丝投稿相信很多人对于MySQL的索引都不陌生,索引(Index)是帮助MySQL高效获取数据的数据结构。因为索引是MySQL中比较重点的知识,相信很多人都有一定的了解,尤其是在面试中出现的频率特别高。楼主自认为自己对MySQL的索引相关知识有很多了解,而且因为最近在找工作面试,所以单独复习了很多关于索引的知识。但是,我还是图样图森破,直到我被阿里的面试官虐...原创 2019-07-09 11:31:43 · 1302 阅读 · 1 评论 -
Select Count语句剖析
数据库查询相信很多人都不陌生,所有经常有人调侃程序员就是CRUD专员,这所谓的CRUD指的就是数据库的增删改查。在数据库的增删改查操作中,使用最频繁的就是查询操作。而在所有查询操作中,统计数量操作更是经常被用到。关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT。但是,就是这个常用的COUNT函数,却暗藏着很多玄机,尤其是在面试的时候,一不小...原创 2019-11-07 10:25:13 · 938 阅读 · 0 评论 -
mysql 缓存是如何使用内存的
首先提一下查询缓存 在解析一个查询语句前,如果查询缓存是打开的,而且查询语句是命中查询缓存中的数据。在检查一次用户权限后直接返回缓存中的结果。这种情况下,查询不会被解析,也不会生成执行计划,更不会执行。开启缓存也会带来开销,主要表现在以下几个方面: 任何的查询语句在开始之前都必须经过检查,即使这条SQL语句永远不会命中缓存 如果查询结果可以被缓存,那么执行完成后...原创 2019-11-25 14:29:12 · 448 阅读 · 0 评论 -
数据库设计缺陷导致的数据恢复
数据库设计是信息系统设计的基础,一个好的数据库设计在满足软件需求之外,还要易维护、易扩充等等。作为一个好的数据库应该满足以下几点(作者的观点,意见不同者可以留言讨论)首先要满足用户的需求 其次要便于维护和扩充 数据库设计要具有可读性 能满足空间和设计的要求 可以简化业务逻辑设计接下来说一下本文主要讲的一次数据库设计缺陷,导致用户操作之后,改变了之前存储的数据,为什么会导致这种结果...原创 2019-01-24 10:07:07 · 1266 阅读 · 1 评论 -
java list 分页
public static List<InvoiceProcessApplicationVo> getListPage(int page, int pageSize, List<InvoiceProcessApplicationVo> list) { if (list == null || list.size() == 0) { t...原创 2018-12-21 11:46:50 · 993 阅读 · 2 评论 -
mysql索引详解
本文从以下几点介绍mysql索引:1、如何建立mysql索引;2、介绍mysql类型;3、mysql索引的利与弊;4、建立索引的注意事项首先假设你有一张表,该表有10万条数据,其中有一条数据是nickname='css',如果要拿这条数据的需要些的sql是select * from award where nickname=‘css’一般情况下,在没有建立索引的时候,mys...原创 2019-01-21 13:34:03 · 1926 阅读 · 0 评论 -
MySQL分页排序中的坑
今天项目提测,被测出了一个奇怪的bug,第一页最后一条数据和第二页的第一条数据重复了,并且神奇的丢失了一个条数据,下面开始来分析一下这个场景。第一页第二页场景为对一些作业进行按时间排序,但是有的作业时间是相同的。对代码进行查看发现,代码并没有什么问题,只是简单的查询全集并按时间排序分页返回给前端。所以去看一看mysql对limit的解释,从官方文档中发现了这样一句话...原创 2019-01-29 16:54:04 · 28195 阅读 · 0 评论 -
MySql数据库--存储过程
在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力。在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用户入门。 存储过程介绍 存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程可由应用程序通过一个调用来执行,而且允许用户声明变量 。...原创 2019-01-31 10:03:19 · 1250 阅读 · 0 评论 -
group by 语句与聚合函数的使用
1.group by语句用来与聚合函数(COUNT、SUM、AVG、MIN、Max)联合使用得到一个列或多个列的结果集。语法如下:select column1, column2, ...column_n, 聚合函数(expression) from tableswhere predicatesgroup by column1,column2,...column_n;举例:...原创 2019-02-18 09:58:20 · 5886 阅读 · 0 评论 -
SQL常见的一些面试题
java基础-1 java基础-2 Dubbo面试题 springboot面试题 SQL常见的面试题 Linux常见的面试题 1.根据表中的信息编写sql语句:id(学号) name(姓名) course(课程) score(分数) 1001 张三 语文 81 1001 张...原创 2019-02-18 11:20:16 · 3449 阅读 · 2 评论 -
MySQL如何查询优化百万级别的数据表
1.两种查询查询引擎查询速度(myIsam引擎)InnoDB中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍表来计算有多少行。myIsam只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作有些不同,InnoDB类型的表用count(*)或者count(主键),加上wher...原创 2019-02-19 16:48:27 · 3983 阅读 · 0 评论 -
SQL中的取整函数FLOOR、ROUND、CEIL、TRUNC、SIGN
1 trunc(value,precision)按精度(precision)截取某个数字,不进行舍入操作。2 round(value,precision)根据给定的精度(precision)输入数值。3 ceil (value) 产生大于或等于指定值(value)的最小整数。4 floor(value)与 ceil()相反,产生小于或等于指定值(value)的最小整数。5 sign(val...原创 2019-03-19 15:57:09 · 6451 阅读 · 0 评论 -
分库分表——如何做到用不迁移数据和避免热点?
一、前言中大型项目中,一旦遇到数据量比较大,小伙伴应该都知道就应该对数据进行拆分了。有垂直和水平两种。垂直拆分比较简单,也就是本来一个数据库,数据量大之后,从业务角度进行拆分多个库。如下图,独立的拆分出订单库和用户库。水平拆分的概念,是同一个业务数据量大之后,进行水平拆分。上图中订单数据达到了4000万,我们也知道mysql单表存储量推荐是百万级,如果不进行处理,my...原创 2019-04-23 10:23:29 · 1331 阅读 · 0 评论 -
Sql性能优化之UNION、UNION ALL、FULL JOIN
一、SQL UNION 操作符UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。也就是说在查询的过程中会比对数据对象的每个字段。1、SQL UNION 语法SELECT column_name(s) FROM tab...原创 2019-05-21 13:31:10 · 5509 阅读 · 0 评论 -
五分钟了解Mybatis-plus
假设我们已存在一张 User 表,且已有对应的实体类 User,实现 User 表的 CRUD 操作我们需要做什么呢?/** User 对应的 Mapper 接口 */public interface UserMapper extends BaseMapper<User> { }以上就是您所需的所有操作,甚至不需要您创建XML文件,我们如何使用它呢?基本CRUD...原创 2019-07-15 17:36:17 · 682 阅读 · 1 评论