我现在有一张表格,其中包含超过4300万条记录。要执行SELECT
,我通常选择具有相同字段的记录,例如A
。将表按不同的A
分为几个表并保存在数据库中会更有效吗?我可以获得多少?
我有一个名为entry: {entryid (PK), B}
的表,其中包含6000条记录,还有其他几个具有T1: {id(PK), entryid, C, ...}
结构的表,其中包含数百万条记录。以下两个过程是否具有相同的效率?SELECT id FROM T1, entry WHERE T1.entryid = entry.entryid AND entry.B = XXX
和
SELECT entryid FROM entry WHERE B = XXX
//format a string S as (entryid1, entryid2, ... )
//then run
SELECT id FROM T1 WHERE entryid IN S
最佳答案
您将获得性能改进。您不必手动执行此操作,而是使用内置的MySQL partitioning。您实际上将获得多少取决于您的配置,这将是您进行测试的最佳选择。例如,如果您有怪物服务器,那么43M条记录就什么也不用了,分区也不会带来太多好处(但是无论如何您都应该得到改进)。
对于这个问题,我想说第一个查询会快很多。
但是最好衡量结果,因为它可能取决于您的硬件配置,索引(使用EXPLAIN来检查索引是否正确),MySQL设置(例如查询缓存大小)以及所使用的引擎(MYISAM, InnoDB)...