SQL查询执行得更快 - 表之间没有关系 - 生成结果更快

时间:2016-07-12 14:40:11

标签: mysql sql database performance

我有4个单独的表,如下所示,每个表都有相同的5列(ID,Shape1,Shape2,Shape3,Shape4)。所有4个表都没有关系。想不出任何可能的关系。

Table Design

每张表有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秒 - 选择语句

1 个答案:

答案 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应该是最后一个。