如果我有一个包含10k行的表TableA
,我想搜索id > 8000
当我使用SQL语句SELECT * FROM TableA WHERE id > 8000
来搜索它们时,MySQL会做什么?它会搜索10k行并返回符合条件的2k行,或者只是忽略那些8k行并返回2k行数据吗?
我还要求每天在数据库中存储大量数据,并且需要快速搜索today
条记录。一张大桌子还是最好的方法还是其他解决方案?
或者最好创建2个表。 all records
为1,today's records
为1,当新数据到来时,两个表都将插入,但第二天将删除第二个表的记录。
在比较选择速度或任何其他好的方法时,哪种方法更好?
实际上我现在没有真正的数据库,但我只是担心 在这种情况下哪种方式/方法可以更好
以下(8-12-2016 11:00)更新了以下信息
我正在使用InnoDB,但我会使用日期作为搜索键,而不是PK。
返回2k行只是研究的一个极端情况,但在实际情况下可能会返回(用户号码*该用户的每个记录),所以如果我有100个用户并且他们在那天制作了10个记录,我可能需要返回1k行记录。
我的真实情况是我需要每天存储所有用户记录(每个用户可能有10条记录),我需要生成最后一天记录和最近7天记录的排名,所以我只是担心我只是搜索最后一天记录在一个大表中,它会很慢还是创建另一个表只是为了保存最后一天的记录?
答案 0 :(得分:1)
PRIMARY KEY
上有id
吗?或者它是次要钥匙?案例:InnoDB和PRIMARY KEY(id)
:执行将从8000开始直到完成。这是最佳的
案例:InnoDB,id
是次要密钥,而且是“小型”密钥。正在获取的表的百分比:将使用索引;它是一个BTree,从8000扫描结束,跳转到数据(通过PK)找到行。
案例:InnoDB,id
是次要的,大百分比:索引将被忽略,整个表格将被扫描("表格扫描"),忽略不行的行#39 ; t匹配WHERE
子句。由于所有“跳转到数据”,表格扫描可能比前一种情况更快。
其他评论:
COUNT
,SUM
搜索索引等来考虑GROUP BY
或FULLTEXT