Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MYSQL视图中排序多个相似的表_Mysql_View_Union_Complexity Theory - Fatal编程技术网

在MYSQL视图中排序多个相似的表

在MYSQL视图中排序多个相似的表,mysql,view,union,complexity-theory,Mysql,View,Union,Complexity Theory,我都, 我有两个类似的非常大的表(每个1米行),具有相同的布局,我将合并它们并按一个公共列排序:start。此外,我会在“开始”中设置一个条件,即:开始>X。 问题是,视图不关心NT start的索引,复杂性也会上升很多,一个简单的查询大约需要15秒,插入一个限制并不能解决问题,因为结果是先被切掉的 CREATE VIEW CDR AS (SELECT start, duration, clid, FROM cdr_md ORDER BY start LIMIT 1000) UNION

我都, 我有两个类似的非常大的表(每个1米行),具有相同的布局,我将合并它们并按一个公共列排序:start。此外,我会在“开始”中设置一个条件,即:开始>X。 问题是,视图不关心NT start的索引,复杂性也会上升很多,一个简单的查询大约需要15秒,插入一个限制并不能解决问题,因为结果是先被切掉的

CREATE VIEW CDR AS
(SELECT start,    duration, clid, FROM cdr_md ORDER BY start LIMIT 1000) 
 UNION ALL 
 (SELECT start,       duration, clid, FROM cdr_1025 ORDER BY start LIMIT 1000) 
 ORDER BY start ;
查询:

SELECT * FROM CDR WHERE start>10
不返回预期结果会导致LIMIT关键字在之前切断结果

预期结果如下所示:

CREATE VIEW CDR AS
(SELECT start,    duration, clid, FROM cdr_md WHERE start>X ORDER BY start LIMIT 1000) 
UNION ALL 
(SELECT start,    duration, clid, FROM cdr_1025 WHERE start>X ORDER BY start LIMIT 1000) 
 ORDER BY start ;
有没有办法避免这个问题? 塔克斯 法布里齐奥

我有两张类似的桌子。。。布局相同

这与实际情况相反

不要这样做。至少不是没有很好的理由,有了合适的索引,每个表100万条记录就足以让MySQL轻松处理,而不需要任何分区;而且,即使确实需要对数据进行分区,也有比这更复杂的手动混乱(这会导致数据不明确、可能不一致,并导致数据操作代码中的冗余和复杂性)

相反,考虑将表合并为具有适当列的单个表,以区分记录的差异。例如:

CREATE TABLE cdr_combined AS
  SELECT *, 'md'   AS orig FROM cdr_md
UNION ALL
  SELECT *, '1025' AS orig FROM cdr_1025
;

DROP TABLE cdr_md, cdr_1025;
如果您总是沿着以前的“分区”轴查看数据,那么将区分列作为索引前缀,与使用单独的表相比,性能通常会有所提高

这样,您就不需要执行任何
联合
,您的
视图
定义有效地变成:

CREATE VIEW CDR AS
SELECT start, duration, clid, FROM cdr_combined ORDER BY start
但是,请注意,对视图的查询可能并不总是像直接使用基础表那样执行。如以下文件所述:

未优化视图处理:

  • 无法在视图上创建索引

  • 索引可用于使用合并算法处理的视图。然而,使用诱惑算法处理的视图无法利用其基础表上的索引(尽管可以在生成临时表的过程中使用索引)


你在
start
上创建索引了吗?非常感谢@eggyal,也许我真的需要重组我的项目。您的解决方案是最容易接受的,因为它更清晰,避免了冗余。也要感谢你的迅速反应