【发布时间】:2016-07-12 14:40:10
【问题描述】:
我有 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 磁盘。
DB 信息:- 用于测试的内存表,以实现每表 1.232 秒 - 选择语句
DB 生产:- MyISAM 表每张表达到 2.808 秒 - Select 语句
【问题讨论】:
-
请提供
EXPLAIN SELECT id FROM Table1 WHERE 'Shape1' = 400 AND Shape 'Shape2' = 300 AND 'Shape3' = 500 AND 'Shape4' = 200和UNION查询的结果。正如 Gordon Linoff 的回答中所述,将列作为一个组进行索引将加快包含每列条件的查询。 -
一个你没有提到的选项——将这些表合并成一个表......然后你就只有一个表了!!
-
@Hogan 如果我将表格组合在一起,它会变得非常慢(因为大小),第二件事是更难分辨形状是在哪个区域排序的
-
@fyrye 给你link
-
@AdamHochker 我这里有一张表,里面有超过 20 亿行,而且速度不慢,如果设计得当,大小与速度无关
标签: mysql sql database performance