首页
学习
活动
专区
圈层
工具
发布

MySQL必须知道的点!

5.禁止存储大文件或者大照片 当人员照片较多时,分页查询速度明显变慢,之前1秒内响应,加了照片字段后,需要4~5秒左右才能响应。...大文件和照片存储在文件系统,数据库里存URI更好 6.表必须有主键,例如自增主键 a)主键递增,数据行写入可以提高插入性能,可以避免Page分裂,减少表碎片提升空间和内存的使用。...7.禁止使用外键,如果有外键完整性约束,需要应用程序控制 外键会导致表与表之间耦合,Update与Delete操作都会涉及相关联的表,十分影响SQL的性能,甚至会造成死锁。...>、NOT IN、NOT LIKE等,会导致全表扫描 b)%开头的模糊查询,会导致全表扫描 (4)禁止大表使用JOIN查询,禁止大表使用子查询 理由:会产生临时表,消耗较多内存与CPU,极大影响数据库性能...(5)禁止使用OR条件,必须改为IN查询 理由:旧版本Mysql的OR查询是不能命中索引的,即使能命中索引,为何要让数据库耗费更多的CPU帮助实施查询优化呢?

87530

MYSQL-主键(Primary Key)

一、主键是什么? 主键是数据库表中的一个或多个字段(列),它的值用于唯一地标识表中的某一条记录。...作为外键参照的基础: 其他表可以通过外键(Foreign Key)来引用本表的主键,从而建立表与表之间的关联关系,保证数据的一致性和参照完整性。...代理主键:使用一个与业务无关的、无意义的字段作为主键(如:自增整数、UUID)。 优点:稳定,业务逻辑变化不影响主键。通常是简单的整数,性能极佳。...空间大:CHAR(36) 或 BINARY(16),比 INT(4字节)/BIGINT(8字节) 大得多。作为主键,每个二级索引的叶子节点都会存储主键值,这会显著增加索引大小。...缺点: 每个二级索引都会包含所有主键列,导致索引体积庞大。 在 InnoDB 中,其他表的外键引用此表时会变得复杂。 建议:除非有非常明确的理由(如上述中间表),否则尽量使用单一的代理主键。

74210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《深入浅出SQL》问答录(六)

    问答录 先看花絮 Q:如果外键是NULL,它右什么作用吗?有办法确定外键已经连接到父键了吗? A:外键为NULL,表示在父表中没有相符的主键。...A:其实可以,但创建成外键约束后,就只能插入已经存在于父表中的值,有助于加强两张表间的连接。 ---- Q:加强连接?是什么意思?...如果我们试着删除主键表中的行或者是改变主键值,而这个主键是其他表的外键约束时,你就会收到错误警告。 ---- Q:所以上面说的那种,我就不能删除了是吗?...A:还是可以的,先移除外键行即可。 ---- Q:遇到多对多关系的时候,一定要用中间件吗? A:不然呢?...插入外键列的值必须已经存在与父表的来源中,这是引用完整性。 创建外键作为表的约束提供了明确的优势,如果违反了规则,约束会阻止我们破坏表。 外键不一定要是父表的主键,但是要具有唯一性。

    1.4K20

    阿里面试官必问的12个MySQL数据库基础知识,哪些你还不知道?

    数据库三大范式是什么 mysql有关权限的表都有哪几个 MySQL的binlog有有几种录入格式?分别有什么区别?...数据库三大范式是什么 第一范式:每个列都不可以再拆分。 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。...第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。 在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。...并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。 MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键。...Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键。比如OA自动化办公系统。 最后 欢迎大家一起交流,喜欢文章记得关注我点个赞,感谢支持!

    1.7K00

    《深入浅出SQL》问答录

    有办法确定外键已经连接到父键了吗? A:外键为NULL,表示在父表中没有相符的主键。但我们可以确认外键包含有意义、已经存储在父表中的值,请通过约束实现。...不能单纯的使用另一张表的键,称之为外键,而不加上约束吗? A:其实可以,但创建成外键约束后,就只能插入已经存在于父表中的值,有助于加强两张表间的连接。 加强连接?是什么意思?...如果我们试着删除主键表中的行或者是改变主键值,而这个主键是其他表的外键约束时,你就会收到错误警告。 所以上面说的那种,我就不能删除了是吗? A:还是可以的,先移除外键行即可。...插入外键列的值必须已经存在与父表的来源中,这是引用完整性。 创建外键作为表的约束提供了明确的优势,如果违反了规则,约束会阻止我们破坏表。 外键不一定要是父表的主键,但是要具有唯一性。 ?...有使用左外连接取代右外联接的理由吗? A:一般来说,固定使用一种联接的习惯会让事情更简单,这样不容易搞混。

    3.8K50

    为什么不推荐数据库使用外键?

    让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议):下面的理由绝不鼓励不要在数据库中使用外键约束。...这可以通过在重新加载时禁用外键来绕过。 然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。...ORM(对象关系映射)框架或Ruby on Rails框架就是这种情况。 这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。...5.跨数据库关系 这可能不是数据库没有外键的正确理由,一些数据库跨越更多的物理数据库甚至引擎,并且在技术上可能不能创建跨越数据库的它不能在同一台服务器上的两个数据库上创建key。...也许这个原因和以前一样,或者是下一个原因: 8.懒惰的架构师 在创建数据库时,如果要存储数据,则需要创建一些表和列。这是最低限度。但是,您不必创建保持数据一致性的结构,如主键,唯一键,外键或约束。

    2.5K20

    “王者对战”之 MySQL 8 vs PostgreSQL 10

    有哪些不同之处呢? 现在,我们只剩下一个问题 —— 那么,选择一个而不选另一个的原因是什么呢? 生态系统是其中一个因素。...由于外键引用和 JOIN 将触发主键查找,所以影响可能非常大,这将导致大量查询。...但是,如果按照现代表设计的约定,将一个自动增量整数作为主键[1]——它被称为代理键——那么拥有一个 聚集索引几乎总是可取的。...那么当你在一个列中有一个大型 JSON 对象时会发生什么呢? Postgres 使用 TOAST,这是一个专用的影子表(shadow table)存储。当行和列被选中时,大型对象就会被拉出。...您不必为接受我说的——实际上在官方wiki上已经有对它的讨论,这表明现在是时候从InnoDB身上学回来一些好的想法了。

    4.8K21

    数据库不推荐使用外键的 9 个理由

    让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议): 下面的理由绝不鼓励不要在数据库中使用外键约束。...这可以通过在重新加载时禁用外键来绕过。然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。...ORM(对象关系映射)框架或Ruby on Rails框架就是这种情况。这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。...5.跨数据库关系 这可能不是数据库没有外键的正确理由,一些数据库跨越更多的物理数据库甚至引擎,并且在技术上可能不能创建跨越数据库的它不能在同一台服务器上的两个数据库上创建key。...也许这个原因和以前一样,或者是下一个原因: 8.懒惰的架构师 在创建数据库时,如果要存储数据,则需要创建一些表和列。这是最低限度。但是,您不必创建保持数据一致性的结构,如主键,唯一键,外键或约束。

    2.1K30

    数据库不使用外键的 9 个理由

    让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议): 下面的理由绝不鼓励不要在数据库中使用外键约束。...这可以通过在重新加载时禁用外键来绕过。然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。 4....ORM(对象关系映射)框架或Ruby on Rails框架就是这种情况。这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。...跨数据库关系 这可能不是数据库没有外键的正确理由,一些数据库跨越更多的物理数据库甚至引擎,并且在技术上可能不能创建跨越数据库的它不能在同一台服务器上的两个数据库上创建key。...也许这个原因和以前一样,或者是下一个原因: 8. 懒惰的架构师 在创建数据库时,如果要存储数据,则需要创建一些表和列。这是最低限度。但是,您不必创建保持数据一致性的结构,如主键,唯一键,外键或约束。

    1.5K10

    数据库不推荐使用外键的9个理由

    让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议): 下面的理由绝不鼓励不要在数据库中使用外键约束。...这可以通过在重新加载时禁用外键来绕过。然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。...ORM(对象关系映射)框架或Ruby on Rails框架就是这种情况。这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。...5.跨数据库关系 这可能不是数据库没有外键的正确理由,一些数据库跨越更多的物理数据库甚至引擎,并且在技术上可能不能创建跨越数据库的它不能在同一台服务器上的两个数据库上创建key。...也许这个原因和以前一样,或者是下一个原因: 8.懒惰的架构师 在创建数据库时,如果要存储数据,则需要创建一些表和列。这是最低限度。但是,您不必创建保持数据一致性的结构,如主键,唯一键,外键或约束。

    2.6K10

    初识MySQL · 约束

    那就是学号,如果是名字的话,是有可能重复的,那么主键的含义就是表示表中的该数据是独一无二的,不能有重复的,不能为空等。 而对于主键来说,一般都是整数类型。...那么为什么需要主键,我们现在没有外键的概念,我们纯拿班级举例,一个老师进班级,谁都不认识,只能通过学号点名,你说,两人的学号一样的话,点一个学号,站起来两人给老师回答问题,这不乱了吗?...所以主键的非空和唯一性我们都验证了,进入下一个了吗? 那肯定不会,如果只验证这两个特点,那这主键就太low了,你说,我们标识唯一性,难道只能用一个字段来标识吗?...那么我们有了主键之后,我们应该如何删除主键呢?或者我们忘记添加主键了,我们应该如何添加呢?...对于唯一键来说,也是可以删除和添加的,和主键也差不多,也是存在复合唯一键的,所以除了使用的点不同,键的特性还是差不了太多的: 接下来就是自增长了,这个非常简单,可以理解为自动++: create table

    65700

    MySQL8和PostgreSQL10功能对比

    现在MySQL 8和PostgreSQL 10已经发布,现在是重新审视两个主要的开源关系数据库如何相互竞争的好时机。...也就是说,如果您在30台服务器上运行Rails应用程序,其中每台服务器具有16个CPU内核和32个Unicorn worker,则您有960个连接。...使用聚合索引时,当您通过主键查找记录时,单个I / O将检索整行,而非聚集索引始终通过遵循引用至少需要两个I / O。由于外键引用和联接将触发主键查找,因此影响可能很大,这将占查询的绝大多数。...但是,考虑到现代惯例,将自动递增的整数作为主键[1](称为代理键),几乎总是希望拥有聚合索引。...MySQL上的压缩不仅适用于页面外的大对象,而且适用于所有页面。它是通过在稀疏文件中使用打孔来实现的,稀疏文件受ext4或btrfs等现代文件系统支持。

    3.4K20

    【每日精选时刻】蓝牙耳机丢了,我花几分钟写了一个小程序,找到了!GoFrame框架学习之旅;Get到了一只“TCP不丢包”

    点此一键订阅【每日精选时刻】专栏,吃瓜新鲜作品不迷路!...拿到这款"TCP 不丢包"之后我苦思冥想:我对 TCP 的掌握足够了吗?我对 TCP 的相关概念都清晰了吗?我拥有解决 TCP 丢包的办法了吗?...今年的你,是否比去年更“牛”了呢?在这个特别的日子里,腾讯云开发者社区特别准备了限定话题——程序员最想收到的祝福是什么?1024程序员节有奖征文|多写牛「码」,不做牛马!...在二进制构筑的计算机世界里,1024是技术人最熟悉的“整数”。今年腾讯云开发者社区陪伴各位小伙伴度过第7个1024程序员节!...快来和百万开发者分享你在一息万变的时代下磨砺成长的经验,记录那些惊喜的、顿悟的、困扰的、闪闪发光的时刻,享受Switch、键鼠与海量鹅厂程序员周边好礼

    25110

    MySQL(五)之DDL(数据定义语言)与六大约束

    那怎么办呢?...,像这样的字段,就符合外键的特点,就可以使用外键约束,使该字段只能够存储另一张表的主键。     ...2)外检的特点       2.1)、外键约束可以描述任意一个字段(包括主键),可以为空,并且一个表中可以有多个外键。但是外键字段中的值必须是另一张表中的主键。       ...2.3)、子表被外键约束修饰的字段必须和父表的主键字段的类型一样。     注意:一个表中有被外键修饰的字段,就称该表有外键(是“有外键”。...tableA和tableB两个表,被外键约束修饰的字段为tableB中的deptId,主键字段为tableA中的id  4.3、非空约束     NOT NULL:被该约束修饰了的字段,就不能为空,主键约束中就包括了这个约束

    2.5K90

    浅谈数据库主键策略

    因为主键的第二个作用是让其他表的外键引用自己,从而实现关系结构。一旦某个表的主键发生了变化,就会导致所有引用了该表的数据必须全部修改外键。...很多Web应用的数据库并不是强约束(仅仅引用主键但并没有设置外键约束),修改主键会导致数据完整性直接被破坏。 业务字段不可用于主键 所有涉及到业务的字段,无论它看上去是否唯一,都决不能用作主键。...那么,主键应该使用哪个字段呢? 主键必须使用单独的,完全没有业务含义的字段,也就是主键本身除了唯一标识和不可修改这两个责任外,主键没有任何业务含义。...我们先看使用整数的问题。 使用整数有两个选择:数据库自增和自己生成。 自己生成其实也是自增,无非就是把上次使用的值保存到某个地方,下次使用的时候继续自增。...为啥64位整数除掉时间戳只能用后面的fffff位呢?

    1.7K100

    【自然框架】元数据的数据库结构的详细说明和示例(二):数据库描述部分

    把这些都记录下来,并且加上说明和关联,我觉得是很有必要的。...主键;3:外键 ColSysName 字段名称 nvarchar 50 _ 数据库里的名称 ColName 对外名称 nvarchar 50 _ 显示给用户看的名称 ColType 字段类型 nvarchar...在表单里对应的控件 CheckKindID 验证类型 int 4 1 外键。...0 如果该字段是外键,则记录外键对应的表的名称 ForeignColumnID 对应外键字段名 int 4 0 如果该字段是外键,则记录在外键表里对应的字段的名称 这个表里要记录一个项目里所有的字段的信息...60万、100万级别的数据,都不会有什么慢的感觉,小一点的项目才几十个表、一千不到的字段,怕什么呢?即使大一点的项目,几百个表、上万个字段,也只不过是“万”级别的数据,也没有什么可担心的。

    80950

    数据库知识学习,数据库设计优化攻略(一)

    1.3.3 主键的设计 ➢ 主键是必要的,SQL SERVER 的主键同时是一个唯一索引,而且在实际应用中,我们往往选择最小的键组合作为主键, 所以主键往往适合作为表的聚集索引。...➢ 在有多个键的表,主键的选择也比较重要,一般选择总的长度小的键,小的键的比较速度快,同时小的键可以使主键 的 B 树结构的层次更少。...➢ 主键的选择还要注意组合主键的字段次序,对于组合主键来说,不同的字段次序的主键的性能差别可能会很大,一般 应该选择重复率低、单独或者组合查询可能性大的字段放在前面。...1.3.4 外键的设计 ➢ 外键作为数据库对象,很多人认为麻烦而不用,实际上,外键在大部分情况下是很有用的,理由是: ➢ 外键是最高效的一致性维护方法,数据库的一致性要求,依次可以用外键、CHECK...我这里说的谨慎,是因为级联删除和级联更新有些突破了传统的关于外键的定义,功能有点 太过强大,使用前必须确定自己已经把握好 其功能范围,否则,级联删除和级联更新可能让你的数据莫名其妙 的被修改或者丢失。

    58730
    领券