我是 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_id 和 stop_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/