mysql - 用于从多个大表中创建新表的 sql 语法

标签 mysql sql phpmyadmin

我是 MySql 和 sql 的新手。 我不知道如何执行以下操作:

我有一个包含四个相关的公交时刻表数据库:

stops (24,403 rows)
-------------------
stop_id   int(11)


stopTimes (12,073,459 rows)
---------------------------
trip_id         varchar(30)
stop_sequence   int(11)     // running sequence within the trip: 1-last
stop_id         int(11)

trips (320,395 rows) 
---------------------------
trip_id   varchar(30)
route_id  int(11)


routes (9,748 rows)
---------------------------
route_id            int(11)
agency_id           int(11)                     
route_short_name    varchar(10)

关系

  • 行程路线:一对多
  • 停止时间的行程:一对多
  • 停止次数:一对一

在这些表中,我想创建一个包含以下字段的新表“routeStops”:

routeStops (~100,000 rows)
---------------------------
route_id            int(11)
agency_id           int(11)                     
route_short_name    varchar(10)
stop_id   int(11)

它与停靠点之间存在一对多关系。

是否有可以执行该操作的SQL 查询

我应该为 route_idstop_id 添加索引以优化性能吗?我应该为 trip_id 添加全文索引吗?

我是新手,希望能提供一些见解。

我正在使用 PHPMyAdmin 和一个相当新的 XAMPP 安装。

谢谢,

最佳答案

是否有可以执行该操作的 SQL 查询?

您可以使用 INSERT ... SELECT 来实现它语法:

INSERT INTO routeStops (route_id, agency_id, route_short_name, stop_id)
SELECT DISTINCT r.route_id, r.agency_id, r.route_short_name, s.stop_id
  FROM routes r
  JOIN trips t ON r.route_id = t.route_id
  JOIN stopTimes s ON t.trip_id = s.trip_id;

是否应该为 route_id 和 stop_id 添加索引以优化性能?

那些应该是他们表中的主键,以及其他表中的外键。

我应该为 trip_id 添加全文索引吗?

我不推荐它,因为它太慢了。我建议您更改表格并为 trip_id 使用 int:

CREATE TABLE trips (
  trip_id int(10) unsigned NOT NULL,
  trip_id_old varchar(30) DEFAULT NULL,
  route_id int(11) DEFAULT NULL,
  PRIMARY KEY (trip_id)
)

关于mysql - 用于从多个大表中创建新表的 sql 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11694931/

相关文章:

phpmyadmin - 从服务器导入 SQL 转储到本地时出错

sql - postgres 中的行级安全性 (RLS) 性能明显较慢。

javascript - Mysql查询时间问题?

mysql - 在 phpmyadmin SQL 选项卡上使用 IF 语句

php - mysql单次查询获取最新10条结果

sql - 用户按周积分,而不是总积分

php - 我的新笔记本电脑上的 wamp 服务器出现严重问题

php - Symfony2 对具有 maxresults 和 firstresult 的查询的错误响应

MySQL 组合(内连接和选择)效率

mysql - 为范围内的每个日期选择行