假设您有4种评估类型:测试,测验,MiniQuiz和FinalExam

我们像这样将记录存储在数据库中

studentid ----- assesType

1 test

2 quiz

3 quiz

4 quiz

5 miniquiz

6 miniquiz

7 final

8 final

它是更快还是更好的为每种类型分配数字的方法,可以这样说:

测试= 1

测验= 2

小测验= 3

最终= 4

并使用它代替记录.

studentid ----- assesType

1 1

2 2

3 2

4 2

5 3

6 3

7 4

8 5

我真正想问的是,这样做值得吗?优势等?因为这样做时用服务器端选择的语言编写代码变得有点困难.

谢谢=)

解决方法:

是的,数字比较比字符串比较快.字符串还占用更多空间,并且数据重复意味着如果必须将“ miniquiz”重命名为“ microquiz”,则必须更新所有行.最后,也许是最重要的一点,您的数据库将无法拒绝不可接受的字符串:您说过有四种评估类型,但是数据库很乐意接受您传递的任何字符串.

通常,您将要创建另一个表,也许将其称为assesTypes,仅包含id和name字段,并将所有可接受的类型保留在其中.然后,在主表中,将assesType字段设置为foreign key,该字段引用新的assesTypes表的id属性.例:

CREATE TABLE assesTypes (

id int,

name varchar(15),

PRIMARY KEY (id)

) ENGINE=INNODB;

CREATE TABLE assessments (

student_id int,

assesType int,

mark int,

PRIMARY KEY (student_id, assesType),

FOREIGN KEY (assesType) REFERENCES assesTypes (id)

) ENGINE=INNODB;

现在我们可以填充我们的assesTypes表:

INSERT INTO assesTypes VALUES (1, 'Test');

INSERT INTO assesTypes VALUES (2, 'Quiz');

INSERT INTO assesTypes VALUES (3, 'MiniQuiz');

INSERT INTO assesTypes VALUES (4, 'FinalExam');

现在,让我们将一些评估数据插入评估表中:

INSERT INTO assessments VALUES (1, 1, 55);

INSERT INTO assessments VALUES (1, 2, 65);

INSERT INTO assessments VALUES (1, 3, 75);

很好现在,我们可以使用评估类型表INNER JOIN评估表,如下所示:

SELECT a.student_id, at.name, a.mark

FROM assessments a

JOIN assesTypes at ON (at.id = a.assesType);

对于此结果:

+------------+----------+------+

| student_id | name | mark |

+------------+----------+------+

| 1 | Test | 55 |

| 1 | Quiz | 65 |

| 1 | MiniQuiz | 75 |

+------------+----------+------+

3 rows in set (0.00 sec)

现在,让我们尝试在评估表中插入无效的asssesType:

INSERT INTO assessments VALUES (1, 5, 75);

我们不能. MySQL将报告:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails

外键不需要具有有效的关系数据库,但对于避免断开的关系和孤立的行(例如referential integrity),它们是必不可少的.要使ACID中的C能够正常运行,必须具有在数据库级别上强制执行引用完整性的功能.

标签:query-optimization,sql,mysql

来源: https://codeday.me/bug/20191105/1998172.html

mysql查询数字比字符串快,与字符串相比,MySQL在where子句中使用数字更快吗?相关推荐

  1. 给定一个arr,里面的数字都是0~9,你可以随意使用arr中的数字,哪怕打乱顺序也行, 请拼出一个能被3整除的最大的数字,用str形式返回。

    面试刷题第一天 给定一个arr,里面的数字都是0~9, 你可以随意使用arr中的数字,哪怕打乱顺序也行, 请拼出一个能被3整除的最大的数字,用str形式返回. 来自去哪儿网. 贪心思路的解题算法如下: ...

  2. Windows系统中让硬盘更快的九大绝招

    Windows系统中让硬盘更快的九大绝招 一.合理使用硬盘  何为合理使用硬盘呢?首先我们要了解硬盘盘片的物理结构.分区并格式化后的硬盘却是以扇区为基本单位的,一个分区是由若干个扇区构成的.那什么是扇 ...

  3. mysql查询后10条数据类型_30多条mysql数据库优化方法,千万级数据库记录查询轻松解决...

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  4. mysql查询雇员部门和性别_数据库管理系统MySQL实验

    <数据库管理系统MySQL实验>由会员分享,可在线阅读,更多相关<数据库管理系统MySQL实验(14页珍藏版)>请在人人文库网上搜索. 1.课 程 实 验 报 告实验项目名称实 ...

  5. mysql 查询用户最后登陆时间_弄懂mysql:mysql的通信协议

    我准备从mysql的实现出发,将mysql好好理解一下,从他的逻辑结构一层一层出发,感受一下,所以再学第一层之前,要先对mysql整体的逻辑结构有一个初步认识 mysql逻辑架构 整体来说,MySql ...

  6. mysql 查询后根据值的不同进行判断与修改,SQL中的条件判断语句(case when zhen)用法

    需求: mysql 查询后根据值的不同进行判断与修改 语法结构: SQL中的条件判断语句(case when zhen)用法 SELECT A.品号,属性,        CASE           ...

  7. mysql查询后从高到低排序_[MySQL基础]三、排序查询

    排序查询 语法: SELECT 查询列表 FROM 表 [WHERE 筛选条件] ORDER BY 排序列表 [ASC|DESC]; #[ ]中的内容表示可选 特点:asc代表的是升序,desc代表的 ...

  8. mysql查询第10到第20条记录_“取出数据表中第10条到第20条记录”的sql语句+selecttop用法...

    1.首先,select top用法: 参考问题 select top n * from和select * from的区别 select * from table -- 取所有数据,返回无序集合 sel ...

  9. mysql查询选课程的学生学号和姓名_数据库SQL语句中查询选修了全部课程的学生的学号和姓名理解...

    首先头脑中有三点概念: 1.EXISTS子查询找到的提交 NOTEXISTS子查询中找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕. 2.建立程序循环的概念,这是一个动态的查询过程.如FOR ...

最新文章

  1. 3天我把DDD业务领域建模、数据库、聚合彻底撸干净了!
  2. go设计模式之单例模式
  3. es6 Trait修饰器
  4. matlab std函数_如何利用Matlab进行小波分析
  5. php语法介绍,PHP 函数语法介绍一
  6. mysql 备份表_Mysql 表的备份与恢复
  7. sqlserver 调优(三)
  8. html swf修改参数,HTML网页中如何向swf传递参数
  9. php opendir(),PHP opendir()用法及代码示例
  10. java 打印堆栈_Java打印完整的堆栈信息
  11. 跳跃游戏 改 dfs
  12. 安卓u盘格式化工具apk_你听说过badusb么,我扔个U盘你敢捡么?(文末附阿里云盘最新邀请码)...
  13. dlang语法的简单整理
  14. 算法之算法的时间复杂度
  15. 微信小程序上线缓存及解决办法
  16. linux shell获取当前脚本所在目录
  17. Oracle分区之五:创建分区索引总结
  18. 持续集成/持续部署(1)Git Gitlab
  19. 针对 store_name 字段
  20. 拓展模块使用教程和心得(四):PWM脉冲宽度调制及普通有刷马达和空心杯电机(测试平台:STC8A8K,STM32F103)

热门文章

  1. 领取Virmach免费Minecraft主机搭建“我的世界”服务器
  2. iOS 排序算法总结、二分法查找
  3. Linux下安装jdk1.6
  4. Power Shell03 在PowerShell 3.0重新启动计算机指令
  5. ASPxGridView之PreviewRow
  6. 14.3.1 调用系统的拍照功能
  7. 据lovecherry的一步一步学Remoting序列文章学习.net Remoting日记(2)
  8. [视频]用SQL Server Compact创建简单的Windows应用程序
  9. 微信(WeChat)电脑端多开
  10. 将字典结果写入excel