摘要:查询 常用的查询字段,记得加索引 加索引能够提高查询速度。 join不要超过两张表 join 越多,查询越慢。最好用简单的查询语句。 分页查询一定要记得加 order by MYSQL分页查询时没有用ORDER BY,数据量大的时候,有可能会出现数据重复。 详情见: https://cloud.te
阅读全文
摘要:sql隐式转换 在SQL中,隐式转换是数据库自动进行的类型转换,隐式转换可以帮助我们处理不同类型的数据。 比如,数据表的字段是字符串类型的,传入一个整型的数据,也能够运行sql。 sql隐式转换的弊端 sql隐式转换,有可能会导致用不上索引,导致查询变慢。 mySql CAST() 函数转换类型 C
阅读全文
摘要:MySQL自增id: 优点: 1.简单易用 MySQL自增id 由数据库自动生成。 2.效率高 自增id是按顺序递增的,可以提高插入和查询的效率。 3.索引效率高 自增id可以作为主键或索引列,提高查询效率。 缺点: 1.不适用于分布式系统 在分布式环境下,多个节点生成的自增id可能会冲突,需要
阅读全文
摘要:### 分库分表 之前试过了分表不分库,详情见:https://www.cnblogs.com/expiator/p/17524493.html 这次再试下分库分表。 ### 依赖包 SpringBoot 用的是 2.6.13 版本。 ``` org.apache.shardingsphere sh
阅读全文
摘要:### shardingsphere-jdbc 5.0 有什么优点? 5.0之前的版本,不支持CASE WHEN、HAVING、UNION(ALL),有限支持子查询。 5.0支持这些特性,开发起来会更方便些。 ### 依赖包 SpringBoot 用的是 2.6.13 版本。 ``` org.apa
阅读全文
摘要:### 一、依赖包 SpringBoot 用的是 2.0.6.RELEASE 版本。 ``` io.shardingsphere sharding-jdbc-spring-boot-starter 3.0.0.M4 org.springframework.boot spring-boot-start
阅读全文
摘要:mysql的IN里面的数量太大,比如大于1千时,查询的性能就会差很多。 有以下的解决方法。 ### 解决方法一:拆分IN的数量 **IN 数量超过1千,就拆成多条 sql, 每条sql的IN数量不超过1千。** 用OR或者UNION进行SQL改写。 也可以使用 Java写代码,把 IN 数量进行拆分
阅读全文
摘要:为什么要优化慢sql ? 慢sql会长时间占用 数据库连接数,如果项目中有大量的慢sql,那么可用的数据库连接数就会变少,进而会影响业务。 慢sql优化 优化慢sql,最常见的就是添加索引。 查询语句中不要使用select * 尽量减少子查询,使用关联查询(left join,right join,
阅读全文
摘要:什么时候使用Mysql分区表? 一般情况下,Mysql单表达到千万级别就可能会查询较慢。 在数据量比较大的情况下,可以考虑使用Mysql分区表。 分区可以将一张表从物理层面根据一定的规则将数据划分为多个分区,多个分区可以单独管理,提升效率。 假如一张表有一千万条数据,拆分成20个分区,在分区数据均匀
阅读全文
摘要:### 明细表 明细表/详情表比较常用。一般会有一张带有 id 的主表,比如 tt_order,主键为 id,字段比较少。 明细表/详情表 tt_order_detail ,存放了大量的明细字段,有一个字段 order_id,通过这个字段去关联主表。 ### 关系表 比如现在有一张用户表 tt_us
阅读全文
摘要:命名 mysql表名的命名规范为表名可以用 t_ 、tb_的前缀,或者是业务模块前缀。比如t_order。 有些项目也会使用 tt_、tm_、 ts_ 等前缀,根据项目的习惯命名就好了。 主键: AUTO_INCREMENT 表示自增,UNSIGNED 表示无符号,UNIQUE 表示唯一约束,COM
阅读全文
摘要:大表直接建索引 数据量大的表,直接建索引会耗费非常多的时间,最好不要在高峰期执行。 非高峰期在大表建索引,也有可能无法在当天跑完。 大表建索引 可以先新建一张相同表结果的表,表里面没有数据,创建索引非常快,再把旧的大表数据复制到新表。 (1) 新建相同表结构的表: create table tabl
阅读全文
摘要:问题描述 Data too long for column '' 解决方法 明显是数据表字段太短,插入数据长度过长导致的。 第一种解决方法: 增大字段长度: ALTER TABLE tt_accident CHANGE safe_deal_account safe_deal_account VARC
阅读全文
摘要:背景 mysql查出来的时间跟数据库相差13/14小时,写入的时间跟数据库也相差13/14小时。 问题原因 查看时区: 在mysql中执行以下命令: SHOW VARIABLES LIKE '%time_zone%'; 查询结果如下: 可以看到时区使用的是 CST,而 CST 是一种混乱的时区。它可
阅读全文
摘要:B+树 mysql索引的数据结构最常见的是B+树。 在B+树中,所有数据记录都是放在同一层的叶子节点上,并且是按键值大小顺序存放的。 有序的存放比无序的存放,查询速度更快。 B+树的中间节点只存放指向下一层节点的指针,这样能让查询更快,叶子节点存储的数据更多。 B+树的高度一般都在2-4层,也就是说
阅读全文
摘要:在开发中,经常会遇到一种业务情景: 先查询,如果不存在就插入,如果存在就更新。 遇到批量更新(先查询,再插入或更新)时,有以下可选方案: 第一种方案: 批量查询,再批量插入/批量更新 先逐个查询,需要插入的放到一个insertList中进行批量插入,需要更新的放到另一个updateList中进行批量
阅读全文
摘要:默认的事务隔离级别不一样。 Mysql默认的事务隔离级别是重复读,Oracle默认的是读提交。 对事务的提交 MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮。 单引号的处理 MYSQL里可以用双引号包起字符串,ORACLE
阅读全文
摘要:sql 将一张表的字段复制到另一张表 我们在上线新功能后,有时修改了后台字段,需要兼容旧数据,得将一张表的字段复制到另一张表。 存在以下两种情况: 一、查询一张表B的字段,插入另一张表A。 格式如下: 示例: 如果字段需要计算后再复制,示例如下: 二、查询一张表B的字段,更新另一张表A 可以使用UP
阅读全文
摘要:可重复读 Mysql的事务隔离级别,默认是可重复读(repeatable read)。 以下通过具体的sql操作去理解可重复读。 建表 CREATE DATABASE test; USE test; CREATE TABLE ( int(11) NOT NULL AUTO_INCREMENT COM
阅读全文