问一个关于A表是否要加一个是和否的状态字段(叫state)的问题
答案:2 悬赏:60
解决时间 2021-11-10 01:46
- 提问者网友:说不出醉人情话
- 2021-11-09 11:45
问一个关于A表是否要加一个是和否的状态字段(叫state)的问题,B表有个字段关联到A表(叫fk_A,不能为空),当我向B表添加一条记录的时候就将state的值改成“是”。当我想过滤A表的数据(通过状态来过滤)的时候我可以这么写SELECt * from A where state='是',也可以关联表去写,如:SELECt aa.name from A as aa where (SELECt COUNT(bb.id) FROM B as bb where bb.fk_A=aa.id) >0请问大写要不要加state字段呢??加了的话有什么优缺点,我觉得加了有点多余,这样就只能关联表去做过滤,觉得通过关联表去做过滤的sql能让人好理解sql的意思和了解业务。是不是如果A表的数据量可能会很多,所有才加state这个字段呢??
最佳答案
- 二级知识专家网友:爱情是怎么炼成的
- 2021-11-09 12:43
不需要加状态字段。
加状态字段的逆势:
1) 多了一个字段
2) 查询时,因为该字段值仅仅有两种值“是”和"否",用来筛选时基本会扫描整张表,效率不高;而如果用链接b表,并且A表id和b表fk_A都有索引的情况下,会执行索引扫描,效率比较高
另外,查询语句不要使用在where中去count,如果B表中fK_A的值具有唯一性,可以用内连接进行查询:
select aa.*
from A aa
inner join B bb on bb.fk_A = aa.id如果B表的fk_A值不具有唯一性,那么使用exists来做条件:
select aa.*
from A aa
where exists (select bb.id from B bb where bb.fk_A = aa.id)
加状态字段的逆势:
1) 多了一个字段
2) 查询时,因为该字段值仅仅有两种值“是”和"否",用来筛选时基本会扫描整张表,效率不高;而如果用链接b表,并且A表id和b表fk_A都有索引的情况下,会执行索引扫描,效率比较高
另外,查询语句不要使用在where中去count,如果B表中fK_A的值具有唯一性,可以用内连接进行查询:
select aa.*
from A aa
inner join B bb on bb.fk_A = aa.id如果B表的fk_A值不具有唯一性,那么使用exists来做条件:
select aa.*
from A aa
where exists (select bb.id from B bb where bb.fk_A = aa.id)
全部回答
- 1楼网友:萌萌哒小可爱
- 2021-11-09 14:08
用contact连接两个字段
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯