我有 4 个单独的表,如下所示,每个表都有相同的 5 列(ID、Shape1、Shape2、Shape3、Shape4)。所有 4 个表之间没有任何关系。想不出任何可能的关系。
每个表有 1 亿行数据,100 X 4 = 4 亿行
如果我运行以下查询
SELECT id
FROM Table1
WHERE 'Shape1' = 400 AND Shape 'Shape2' = 300 AND 'Shape3' = 500 AND 'Shape4' = 200
它在 1.232 秒内搜索每个表。这就是瓶颈所在,当单独运行时,我必须等待 9.032 秒才能完成所有四个查询。
我也尝试过像下面这样的 UNION 但它真的很慢 17.042 秒 UNION
不确定这里是否连接表,因为没有任何东西可以连接在一起。我知道
我的问题:- 你能一起搜索所有这些表格吗?组合在单个查询中或单独执行查询是更快执行的唯一方法。
机器数据库:- win 7 X64 - 64 GB RAM COREi7 SSD 磁盘。
数据库信息:- 用于测试每个表 1.232 秒的内存表 - Select 语句
数据库生产:- MyISAM 表达到每个表 2.808 秒 - Select 语句
最佳答案
此查询:
SELECT id
FROM Table1
WHERE 'Shape1' = 400 AND Shape 'Shape2' = 300 AND 'Shape3' = 500 AND 'Shape4' = 200
可能没有达到您的预期。它不应该返回任何行,因为您正在将字符串与整数进行比较。
写成:
SELECT id
FROM Table1
WHERE Shape1 = 400 AND Shape2 = 300 AND Shape3 = 500 AND Shape4 = 200
所有比较都是相等比较。所以,试试这个索引:
CREATE INDEX idx_table1_5 ON table1(Shape1, Shape2, Shape3, Shape4, id);
这应该可以加快第一个查询的速度。您可以为其他表创建类似的索引。
注意:前四列的顺序并不重要。但 id
应该是最后一个。
关于mysql - SQL 查询执行速度更快 - 表之间没有关系 - 更快生成结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38331996/