![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Mysql
文章平均质量分 66
蓝绿色~菠菜
对技术有一颗敬畏和严谨之心,对代码有精益求精的精神。像养小孩和女朋友一样,精心照料和打扮。想清楚了再干,坚持高标准,Design for future!
展开
-
记一次关于BinaryField类型字段对 Mysql | Django分页 | Xadmin列表页 性能影响的大调查
讲一个亲身经历的例子:本人前些日子给公司HR部门做了一个面试管理系统,基于Django框架,采用xadmin扩展。其中一个模块 简历管理模块, 主要功能是上传简历、识别简历文本/关键信息、以及存储简历文件。本来表结构已经设计的好好的,其中文件存储方式采用django默认的文件存储方式:数据库表只存放简历文件的存储路径,简历实体文件则存放在服务器硬盘上。某一天呢,我们不太懂技术的项目经理...原创 2020-01-17 10:51:12 · 2142 阅读 · 1 评论 -
mysql主从同步机制
步入正题前先回顾一下mysql主从同步。mysql主从同步机制:master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中; slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件,并写入本地relay-log(中继日志)文件中; 此时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件; 从节点启动SQL线程从中继日志中读取原创 2022-04-08 18:14:58 · 1134 阅读 · 0 评论 -
Django开启USE_TZ = True时,以时间为参数查询结果为空
django开启时区设置USE_TZ = True时,如果想查询某一天或者某个月的数据,那大概率会返回一个空的queryset。如下:>>> Supplier.objects.filter(create_time__month=7)<QuerySet []>原因:在查询之前,日期时间字段将转换为指定时区的时间,而转化时需要在数据库中定义时区表。官方文档queryset.解决办法:执行如下命令,将系统时区文件到入到数据库表中:mysql_t原创 2021-07-23 14:44:35 · 555 阅读 · 1 评论 -
关系型数据库设计范式及原则
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。,以提升数据库的存储效率、数据完整性和可扩展性。第一范式:确保每列保持原子性要求:要求每一列都是不可分割的原子属性。 要求不存在重复的属性。举例:学号 姓名 性别 年龄 联系电话 居住地址 10010 张思平 男 24 15667084589 河北省唐山市路北区24号 10011.原创 2020-08-24 20:04:52 · 2968 阅读 · 0 评论 -
数据库多级联动表结构设计
以省市区县四级联动为例:方案一:建立多个数据库表,低级表结构中只包含上一级表中id。省表 市表 区表 县表 province city district county id province_id city_id district_id 优点:此设计完全解开了各层之间的耦合性,用类似于链表的形式将多层数据关系起来。 可以节约大量的数据库空间。 维护方便。如果发生了新增和修改操作时,只要修改与之相关的那个表的主键即可。缺点原创 2020-08-11 21:27:39 · 5036 阅读 · 4 评论 -
MySQL事务隔离级别
Read Uncommitted(读取未提交内容)在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。影响:读取其他事务未提交的数据,也被称之为脏读(Dirty Read)。Read Committed(读取提交内容)这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能...原创 2020-04-10 16:00:44 · 914 阅读 · 0 评论 -
一线大厂的分布式唯一ID生成方案
一、UUID这个方案是小伙伴们第一个能过考虑到的方案优点:代码实现简单。 本机生成,没有性能问题 因为是全球唯一的ID,所以迁移数据容易缺点:每次生成的ID是无序的,无法保证趋势递增 UUID的字符串存储,查询效率慢 存储空间大 ID本事无业务含义,不可读应用场景:类似生成token令牌的场景 不适用一些要求有趋势递增的ID场景二、MySQL主键自增...原创 2020-04-07 10:14:26 · 938 阅读 · 0 评论 -
数据库使用外间约束的优劣势
首先我们明确一点,外键约束是一种约束,这个约束的存在,会保证表间数据的关系“始终完整”。因此,外键约束的存在,并非全然没有优点。引言其实这个话题是老生常谈,很多人在工作中确实也不会使用外键。包括在阿里的JAVA规范中也有下面这一条【强制】不得使用外键与级联,一切外键概念必须在应用层解决。但是呢,询问他们原因,大多是这么回答的每次做DELETE 或者UPDATE都必须考虑外键约束,会导............原创 2020-04-04 09:48:05 · 1378 阅读 · 0 评论 -
关于数据库分表
如果你的框架使用了ORM,那么请注意以下两个问题;1、一个模型中的字段个数最好控制在40个以内。2、对于占用空间较大的字段比如TextField,BinaryField最好单独成一张表,以外键关联业务表。详细原因可以参考我的这篇文章https://blog.csdn.net/bocai_xiaodaidai/article/details/104015031...原创 2020-03-27 15:21:32 · 904 阅读 · 0 评论 -
Django如何查看ORM对应的sql 语句
使用 Django 有个很方便的东西就是它的 ORM 查询语句,但是有时候碰上一些复杂的语句,或者新用到的功能,比如 distinct, sum。我们想要知道使用 ORM 查询返回的结果是不是正确,我们可以将之对应的 MySQL 语句打印出来印证一下。有两种方法,如果是比较简单的查询语句,可以使用以下方法:ArticleInfo.objects.filter(id = 1).quer...原创 2020-03-12 09:01:25 · 1677 阅读 · 0 评论 -
Mysql快速插入千万级数据(python实现)
以下仅仅测试插入10000条数据的比较结果,两者效率相差30倍之多。import MySQLdbimport timeconn = MySQLdb.connect(host='xx.xx.xx.xx', port=3306, db='test_for_performance', user='root', ...原创 2020-01-17 10:08:04 · 5611 阅读 · 1 评论 -
MySQL数据库count语句详解
select count(*) 应该是一个比较常用的语句,用来统计记录行数。但是,慢慢地你会发现,这个语句越来越慢了,为什么呢?count(*) 的实现方式首先,我们来看下它的实现方式。MySQL 中,不同的存储引擎,count(*) 的实现方式是不同的。1、MyISAM 引擎,比较简单粗暴,直接将表的总行数存储在磁盘上,因此效率很高;2、InnoDB 引擎中,执行时,需要...原创 2019-11-25 15:35:43 · 7241 阅读 · 0 评论 -
哈希表、哈希索引详解
1、什么是哈希表?哈希表(也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。简单地说,哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位...原创 2019-09-29 10:03:33 · 5614 阅读 · 0 评论 -
MySQL普通索引和前缀索引
一、概述我有一个需求是需要邮箱登录的,mysql> select f1, f2 from SUser where email='xxx';我们知道,如果不在 email 上建立索引,那么将会走全表扫描。于是,我们有两种建立方式 -mysql> alter table SUser add index index1(email); // 普通索引...原创 2019-11-22 14:35:27 · 1078 阅读 · 0 评论 -
MySQL全表扫描的原因
全表扫描是数据库搜寻表的每一条记录的过程,直到所有符合给定条件的记录返回为止。通常在数据库中,对无索引的表进行查询一般称为全表扫描;然而有时候我们即便添加了索引,但当我们的SQL语句写的不合理的时候也会造成全表扫描。以下是经常会造成全表扫描的SQL语句及应对措施:1. 使用null做为判断条件如:select account from member where nickname = nul...原创 2019-11-15 09:59:02 · 748 阅读 · 0 评论 -
MySQL数据库连接池
一. 什么是数据库连接池官方:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对连接池中的连接进行申请,使用,释放。理解:创建数据库连接池是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接池,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加的安全可靠...转载 2019-11-06 11:15:46 · 263 阅读 · 0 评论 -
MySQL索引
索引是一种高效获取数据的存储结构,例:hash、 二叉、 红黑。SQL Sever索引类型有:唯一索引,主键索引,聚集索引,非聚集索引。MySQL 索引类型有:唯一索引,主键(聚集)索引,非聚集索引,辅助索引,全文索引。Myisam引擎(非聚集索引)索引数据结构为B + 树若以这个引擎创建数据库表Create table user (…..),它实际是生成三个文件:us...原创 2019-09-29 10:40:20 · 1065 阅读 · 0 评论 -
MySQL在什么操作场景下会使用索引
快速查找符合where条件的记录 快速确定候选集。若where条件使用了多个索引字段,则MySQL会优先使用能使候选记录集规模最小的那个索引,以便尽快淘汰不符合条件的记录。 如果表中存在几个字段构成的联合索引,则查找记录时,这个联合索引的最左前缀匹配字段也会被自动作为索引来加速查找。 例如,若为某表创建了3个字段(c1, c2, c3)构成的联合索引,则(c1), (c...原创 2019-09-12 15:32:57 · 1203 阅读 · 0 评论