![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 62
shaobohong
这个作者很懒,什么都没留下…
展开
-
Mysql查询结果去除换行
使用REPLACE和CHAR原创 2022-06-30 09:50:39 · 952 阅读 · 0 评论 -
高性能MySQL笔记
第7章 分区表7.1分区表将数据按照一个较粗的粒度分在不同表 适用于:表太大无法全部放内存、只有部分热点数据其他都是历史数据、对分区单独操作7.1.1分区表的原理分区表由多个底层表实现,从存储引擎角度看,它们和普通表没有区别 select:判断是否可以过滤分区再执行 insert:判断由哪个分区接收再执行 delete:判断在哪个分区再执行 update:判断数据在哪个分区,取出更新,判断更新后的数据应放哪个分区再执行7.1.2分区表的类型根据范围、时间间隔、键值、哈希分区7.1原创 2021-12-15 17:53:32 · 522 阅读 · 0 评论 -
MySQL笔记(实践篇)
普通索引和唯一索引,应该怎么选择?select id from T where k=5查询过程(差别不大)通过普通索引的查询过程:查找到k=5记录,接着查找下一条记录直到不满足条件通过唯一索引的查询过程:查找到k=5记录后直接返回由于查询过程是把整个数据页(默认16kb)读入内存,普通索引会多一次指针寻找和计算,如果刚好记录在数据页最后,则要多读取一个数据页,而这影响微乎其微更新过程(写多读少的表建议使用普通索引)通过普通索引的更新过程:当数据在内存中则直接更新;如果不在内存原创 2020-06-30 19:51:49 · 698 阅读 · 0 评论 -
MySQL配置参数和命令
参数 说明 默认值 wait_timeout 连接器等待时间 8小时 query_cache_type 查询缓存。建议设置成DEMAND(不使用),因为一旦对表进行更新,就会清空缓存,缓存的命中率很低,在8.0版本中废弃 innodb_flush_log_at_trx_commit 设置成1,每次事务的redo log都直接持久化到磁盘,保证MySQL异常重启数据不丢失 sync_log 设置成1,每次事务的binlog都直接持...原创 2020-06-29 22:06:33 · 412 阅读 · 0 评论 -
MySQL笔记(基础篇)
目录基础架构:一条SQL查询语句是如何执行的日志系统:一条SQL更新语句是如何执行的事务隔离:为什么你改了我还看不见深入浅出索引(上)基础架构:一条SQL查询语句是如何执行的第一步,连接器,连接到数据库分为长连接和短连接,建议使用长连接,但是长连接随着执行过程会造成内存占用太大,解决方法如下:定期断开长连接 在5.7版本后使用mysql_reset_connection 来重新初始化连接资源第二步,查询缓存,如果有缓存则直接返回建议不使用缓存(将query_cac原创 2020-06-18 19:30:37 · 192 阅读 · 0 评论 -
MySQL索引底层原理
Mysql索引底层数据结构选型1、哈希表(Hash)通过Hash算法,能快速检索数据数据碰撞问题用链地址法无法进行范围搜索2、二叉查找树(BST)解决哈希索引无法范围搜索的问题极端情况下会退化成线性链表,自增主键必然会导致极端情况3、红黑树会自动调整树形态,使其保持平衡,调整会消耗性能无法完全解决二叉查找树的问题4、AVL树绝对平衡的二叉树,更耗性能根本解决了红黑数的问题由于一个节点只存储一个数据,在磁盘IO上消耗过多时间5、B树由于从磁盘读取原创 2020-05-21 18:44:28 · 89 阅读 · 0 评论 -
MySQL配置sql_mode
1、通过以下语句获取sql_mode配置信息show variables like "sql_mode";2、可能得到以下信息:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION3、以下为详细描述:ONLY_FU...转载 2019-11-08 10:30:01 · 185 阅读 · 0 评论 -
java读取mysql形如‘0000-00-00 00:00:00’时间出现异常问题
mysql数据库中日期字段默认为0000-00-00 00:00:00,通过java数据库连接获取数据时会报错解决方法:在jdbc连接配置的连接url加上参数:zeroDateTimeBehavior=convertToNull如:jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf-...转载 2019-05-31 16:15:32 · 1085 阅读 · 0 评论 -
MySQL保存小数的问题
摘抄自https://www.cnblogs.com/geeek/p/4118597.html最近做一个报表,有个字段保存money,涉及到小数,没有多想就将数据库字段设置成了float,等查询出来,真正的值后面加了一坨随机数字,太呕吐了,查了点资料,将该字段格式改成了decimal(10,1),就ok了。例如,语句FLOAT (5,2)规定显示的值不会超过5位数字,小数点后面带有2位数字...转载 2019-05-23 11:52:00 · 10381 阅读 · 0 评论 -
MySQL 视图
视图是一个虚拟表,不存放任何数据。实现:MySQL可以使用合并算法和临时表算法来实现视图。如果视图中包含group by、distinct、任何聚合函数、union、子查询等,只要无法再原表记录和视图记录中建立一一映射的场景中,MySQL都将使用临时表算法实现视图。合并算法:将视图SQL和查询SQL进行合并,查询结果返回到客户端临时表算法:将视图SQL进行查询,返回的结果集存放...原创 2018-12-01 21:17:00 · 125 阅读 · 0 评论 -
MySQL 合并表、分区表
合并表合并表示一种早期的、简单的分区实现,在未来可能被淘汰,不推荐使用。限制:合并表和子表的字段、索引要完全相同 即使子表上有主键限制,合并表中仍然会出现重复值 如果删除其中一个子表,表可能还存在,带只能通过合并表访问(视操作系统而定) 合并表上无法使用replace语法,无法使用自增长字段特性:一个MyISAM表可以是多个合并表的子表 可以直接复制.frm、.MYI、....原创 2018-11-15 16:06:17 · 693 阅读 · 0 评论 -
MySQL 优化SQL语句
优化INSERTinsert into books values (1,'book1'),(2,'book2'),(3,'book3');多条insert语句合并,一次性插入数据库优化ORDER BYselect id,enmae,depno,sal from emp where depno=10;对depno添加索引1.对于order by [sort] limit...原创 2018-11-20 19:13:41 · 149 阅读 · 0 评论 -
MySQL 查询缓存
show variables like '%query_cache%';Variable_name Value have_query_cache YES 查询缓存是否可用 query_cache_type ON DEMAND 缓存是否开启 通过在SQL语句后加上SQL_CACHE / SQL_NO_CAC...原创 2018-11-13 17:36:53 · 113 阅读 · 0 评论 -
MySQL笔记(杂)
字段为null的索引使用 对于name字段,使用select * from table where name is null可以使用索引但是如果name字段设置为not null,则不会使用索引SQL_CALC_FOUND_ROWS在很多分页的程序中都这样写:SELECT COUNT(*) from `table` WHERE ......; 查出符合条件的记录总...原创 2018-10-23 22:21:43 · 104 阅读 · 0 评论 -
SQL提示(hint)
mysql常用的hint对于经常使用oracle的朋友可能知道,oracle的hint功能种类很多,对于优化sql语句提供了很多方法。同样,在mysql里,也有类似的hint功能。下面介绍一些常用的。强制索引 FORCE INDEX SELECT * FROM TABLE1 FORCE INDEX (FIELD1) …以上的SQL语句只使用建立在FIELD1上的索引,而不使用其它字段上的索引...转载 2018-09-25 21:18:54 · 4842 阅读 · 0 评论 -
SQL查询优化笔记
1、对于分页查询,事先进行count查询总的记录数,如果count结果小于分页数,将limit设置为$num,避免全表扫描$num = mysql_query("select count(*) from table where ...", $conn);$limit = 10;if ($num < $limit) { mysql_query("select * from t...原创 2018-09-25 20:16:21 · 133 阅读 · 0 评论 -
MySQL导入文件报错
mysql 导入sql文件过大时 , mysql会报错Lost connection to MySQL server during query ,在my.ini配置文件 mysqld 节点下添加 max_allowed_packet = 900M 配置MySQL允许的最大数据包大小,900M根据你的项目修改为你自己的值,比要导入的备份文件大就ok。 调整缓冲区大小为 20Mset g...转载 2018-08-10 14:31:06 · 349 阅读 · 0 评论 -
MySQL重置root密码处理方法
1、【停止MySQL服务】2、【进入mysql \ bin目录】3、【跳过权限检查】在 bin 目录下输入 mysqld --skip-grant-tables ,跳过权限检查启动 mysql。如果你配置了 my.ini 文件,则需要将其引入: mysqld --defaults-file="../my.ini" --skip-grant-tables 4、【重置密码】打开另一个命令提...原创 2018-07-04 18:47:01 · 330 阅读 · 0 评论