我有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
不确定加入表格,因为没有任何东西可以连接在一起。我知道
我的问题: - 你能一起搜索所有这些表吗?在单个查询中组合或单个执行查询是加快执行速度的唯一方法。
机器DB: - 赢得7 X64 - 64 GB RAM COREi7 SSD磁盘。
数据库信息: - 用于测试的内存表,每个表达到1.232秒 - 选择语句
数据库生产: - 每个表MyISAM表达到2.808秒 - 选择语句
答案 0 :(得分:3)
此查询:
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
应该是最后一个。