Realistic datasets are essential for proper testing
This page describes our setup for DBT-3 tests. A very cogent resource on the DBT3 Benchmark is also available. See also dbt-3-queries
Get DBT3
Make sure that you have pg_ctl and createdb of PostgreSQL installed. On Ubuntu look for postgresql and postgresql-client and make sure that pg_ctl is in your PATH, for instance:
Compile DBT3
Generate data:
Substitute ${ENGINE} with the storage engine you want to use:
Substitute ${DATA_DIR} with the path to your generated data.
This page is licensed: CC BY-SA / Gnu FDL
subquery cache brings no benefit because subquery refers to outer_table.pk, which is different for each row
EXISTS-to-IN is applicable
After that, BKA brings slight speedup
Comments on query plan choice
It seems, we're using the best possible query plan here.
.
This page is licensed: CC BY-SA / Gnu FDL
This page describes how to use the OpenStreetMap dataset in testing.
The database schema is available here. To import:
mysqladmin create osm
cat osmdb06.sql | mysql osmBy default, this schema uses a mixture of InnoDB and MyISAM tables. To convert all tables to Aria:
sed -i -e 's/InnoDB/Aria/gi' osmdb06.sql
sed -i -e 's/MyISAM/Aria/gi' osmdb06.sql30 tables are created.
The data is provided in the form of XML files (.OSM files) that require the Java-based tool to load into MariaDB. The tool is available from . Version 0.36 is known to work.
Various .OSM files are available, including the (>200Gb unzipped) and .
Data is loaded with the following command-line (in the example, we're using the bulgaria.osm file, replace with the file you choose):
Data is inserted into 19 tables, as follows:
This page is licensed: CC BY-SA / Gnu FDL
SELECT
l_returnflag,
l_linestatus,
SUM(l_quantity) AS sum_qty,
SUM(l_extendedprice) AS sum_base_price,
SUM(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
SUM(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
AVG(l_quantity) AS avg_qty,
AVG(l_extendedprice) AS avg_price,
AVG(l_discount) AS avg_disc,
COUNT(*) AS count_order
FROM
lineitem
WHERE
l_shipdate <= date_sub('1998-12-01', INTERVAL 63 DAY)
GROUP BY
l_returnflag,
l_linestatus
ORDER BY
l_returnflag,
l_linestatusSELECT
o_orderpriority,
COUNT(*) AS order_count
FROM
orders
WHERE
o_orderdate >= '1995-06-06'
AND o_orderdate < date_add('1995-06-06', INTERVAL 3 MONTH)
AND EXISTS (
SELECT
*
FROM
lineitem
WHERE
l_orderkey = o_orderkey
AND l_commitdate < l_receiptdate
)
GROUP BY
o_orderpriority
ORDER BY
o_orderpriority;PATH=/usr/lib/postgresql/8.4/bin:$PATHgunzip -c dbt3-1.9.tar.gz | tar xvf -
cd dbt3-1.9
./configure
make
cd src/dbgen
make./dbgen -s30CREATE TABLE supplier (
s_suppkey INTEGER PRIMARY KEY,
s_name CHAR(25),
s_address VARCHAR(40),
s_nationkey INTEGER,
s_phone CHAR(15),
s_acctbal REAL,
s_comment VARCHAR(101)) Engine ${ENGINE};
CREATE TABLE part (
p_partkey INTEGER PRIMARY KEY,
p_name VARCHAR(55),
p_mfgr CHAR(25),
p_brand CHAR(10),
p_type VARCHAR(25),
p_size INTEGER,
p_container CHAR(10),
p_retailprice REAL,
p_comment VARCHAR(23)) Engine ${ENGINE};
CREATE TABLE partsupp (
ps_partkey INTEGER,
ps_suppkey INTEGER,
ps_availqty INTEGER,
ps_supplycost REAL,
ps_comment VARCHAR(199),
PRIMARY KEY (ps_partkey, ps_suppkey)) Engine ${ENGINE};
CREATE TABLE customer (
c_custkey INTEGER PRIMARY KEY,
c_name VARCHAR(25),
c_address VARCHAR(40),
c_nationkey INTEGER,
c_phone CHAR(15),
c_acctbal REAL,
c_mktsegment CHAR(10),
c_comment VARCHAR(117)) Engine ${ENGINE};
CREATE TABLE orders (
o_orderkey INTEGER PRIMARY KEY,
o_custkey INTEGER,
o_orderstatus CHAR(1),
o_totalprice REAL,
o_orderDATE DATE,
o_orderpriority CHAR(15),
o_clerk CHAR(15),
o_shippriority INTEGER,
o_comment VARCHAR(79)) Engine ${ENGINE};
CREATE TABLE lineitem (
l_orderkey INTEGER,
l_partkey INTEGER,
l_suppkey INTEGER,
l_linenumber INTEGER,
l_quantity REAL,
l_extendedprice REAL,
l_discount REAL,
l_tax REAL,
l_returnflag CHAR(1),
l_linestatus CHAR(1),
l_shipDATE DATE,
l_commitDATE DATE,
l_receiptDATE DATE,
l_shipinstruct CHAR(25),
l_shipmode CHAR(10),
l_comment VARCHAR(44),
PRIMARY KEY (l_orderkey, l_linenumber)) Engine ${ENGINE};
CREATE TABLE nation (
n_nationkey INTEGER PRIMARY KEY,
n_name CHAR(25),
n_regionkey INTEGER,
n_comment VARCHAR(152)) Engine ${ENGINE};
CREATE TABLE region (
r_regionkey INTEGER PRIMARY KEY,
r_name CHAR(25),
r_comment VARCHAR(152)) Engine ${ENGINE};
CREATE TABLE time_statistics (
task_name VARCHAR(40),
s_time TIMESTAMP,
e_time TIMESTAMP,
int_time INTEGER) Engine ${ENGINE};LOAD DATA LOCAL INFILE '${DATA_DIR}/supplier.tbl' into table supplier fields terminated by '|';
LOAD DATA LOCAL INFILE '${DATA_DIR}/part.tbl' into table part fields terminated by '|';
LOAD DATA LOCAL INFILE '${DATA_DIR}/partsupp.tbl' into table partsupp fields terminated by '|';
LOAD DATA LOCAL INFILE '${DATA_DIR}/customer.tbl' into table customer fields terminated by '|';
LOAD DATA LOCAL INFILE '${DATA_DIR}/orders.tbl' into table orders fields terminated by '|';
LOAD DATA LOCAL INFILE '${DATA_DIR}/lineitem.tbl' into table lineitem fields terminated by '|';
LOAD DATA LOCAL INFILE '${DATA_DIR}/nation.tbl' into table nation fields terminated by '|';
LOAD DATA LOCAL INFILE '${DATA_DIR}/region.tbl' into table region fields terminated by '|';ALTER TABLE lineitem
ADD INDEX i_l_shipdate(l_shipdate),
ADD INDEX i_l_suppkey_partkey (l_partkey, l_suppkey),
ADD INDEX i_l_partkey (l_partkey),
ADD INDEX i_l_suppkey (l_suppkey),
ADD INDEX i_l_receiptdate (l_receiptdate),
ADD INDEX i_l_orderkey (l_orderkey),
ADD INDEX i_l_orderkey_quantity (l_orderkey, l_quantity),
ADD INDEX i_l_commitdate (l_commitdate);
CREATE INDEX i_c_nationkey ON customer (c_nationkey);
ALTER TABLE orders
ADD INDEX i_o_orderdate (o_orderdate),
ADD INDEX i_o_custkey (o_custkey);
CREATE INDEX i_s_nationkey ON supplier (s_nationkey);
ALTER TABLE partsupp
ADD INDEX i_ps_partkey (ps_partkey),
ADD INDEX i_ps_suppkey (ps_suppkey);
CREATE INDEX i_n_regionkey ON nation (n_regionkey);ANALYZE TABLE supplier;
ANALYZE TABLE part;
ANALYZE TABLE partsupp;
ANALYZE TABLE customer;
ANALYZE TABLE orders;
ANALYZE TABLE lineitem;
ANALYZE TABLE nation;
ANALYZE TABLE region;chmod +x bin/osmosis
bin/osmosis --read-xml file=bulgaria.osm --write-apidb dbType="mysql" host="localhost:port" validateSchemaVersion=no database="osm" user="root" password="<password-goes-here>"MariaDB [(none)]> use information_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [information_schema]> select TABLE_NAME, TABLE_ROWS from TABLES
-> where TABLE_ROWS > 0
-> AND
-> TABLE_SCHEMA='osm'
-> ORDER BY TABLE_ROWS DESC;
+--------------------------+------------+
| TABLE_NAME | TABLE_ROWS |
+--------------------------+------------+
| current_way_nodes | 1559099 |
| way_nodes | 1559099 |
| current_nodes | 1477247 |
| nodes | 1477247 |
| node_tags | 311751 |
| way_tags | 287585 |
| ways | 100007 |
| current_ways | 100007 |
| changeset_tags | 18738 |
| current_relation_members | 14560 |
| relation_members | 14560 |
| changesets | 9369 |
| relation_tags | 3948 |
| current_relations | 937 |
| relations | 937 |
| users | 537 |
+--------------------------+------------+
16 rows in set (0.00 sec)Below is the schema described in the OpenStreetMap Dataset Use article. To use, copy everything in the box below into a file called 'osmdb06.sql', then continue with the instructions.
This page is licensed: CC BY-SA / Gnu FDL
-- phpMyAdmin SQL Dump
-- version 2.11.9.3
-- http://www.phpmyadmin.net
--
-- Хост: mysql.leonenko.info
-- Час стварэньня: 16 Сак 2009, 15:12
-- Вэрсія сэрвэра: 5.0.67
-- Вэрсія PHP: 5.2.6
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- База дадзеных: `osmapper_belarus`
--
-- --------------------------------------------------------
--
-- Структура табліцы `changesets`
--
DROP TABLE IF EXISTS `changesets`;
CREATE TABLE IF NOT EXISTS `changesets` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`user_id` BIGINT(20) NOT NULL,
`created_at` DATETIME NOT NULL,
`min_lat` INT(11) DEFAULT NULL,
`max_lat` INT(11) DEFAULT NULL,
`min_lon` INT(11) DEFAULT NULL,
`max_lon` INT(11) DEFAULT NULL,
`closed_at` DATETIME NOT NULL,
`num_changes` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=20103 ;
-- --------------------------------------------------------
--
-- Структура табліцы `changeset_tags`
--
DROP TABLE IF EXISTS `changeset_tags`;
CREATE TABLE IF NOT EXISTS `changeset_tags` (
`id` BIGINT(64) NOT NULL,
`k` VARCHAR(255) NOT NULL DEFAULT '',
`v` VARCHAR(255) NOT NULL DEFAULT '',
KEY `changeset_tags_id_idx` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `current_nodes`
--
DROP TABLE IF EXISTS `current_nodes`;
CREATE TABLE IF NOT EXISTS `current_nodes` (
`id` BIGINT(64) NOT NULL AUTO_INCREMENT,
`latitude` INT(11) NOT NULL,
`longitude` INT(11) NOT NULL,
`changeset_id` BIGINT(20) NOT NULL,
`visible` TINYINT(1) NOT NULL,
`timestamp` DATETIME NOT NULL,
`tile` INT(10) UNSIGNED NOT NULL,
`version` BIGINT(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `current_nodes_timestamp_idx` (`timestamp`),
KEY `current_nodes_tile_idx` (`tile`),
KEY `changeset_id` (`changeset_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=348816842 ;
-- --------------------------------------------------------
--
-- Структура табліцы `current_node_tags`
--
DROP TABLE IF EXISTS `current_node_tags`;
CREATE TABLE IF NOT EXISTS `current_node_tags` (
`id` BIGINT(64) NOT NULL,
`k` VARCHAR(255) NOT NULL DEFAULT '',
`v` VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`,`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `current_relations`
--
DROP TABLE IF EXISTS `current_relations`;
CREATE TABLE IF NOT EXISTS `current_relations` (
`id` BIGINT(64) NOT NULL AUTO_INCREMENT,
`changeset_id` BIGINT(20) NOT NULL,
`timestamp` DATETIME NOT NULL,
`visible` TINYINT(1) NOT NULL,
`version` BIGINT(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `current_relations_timestamp_idx` (`timestamp`),
KEY `changeset_id` (`changeset_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=80283 ;
-- --------------------------------------------------------
--
-- Структура табліцы `current_relation_members`
--
DROP TABLE IF EXISTS `current_relation_members`;
CREATE TABLE IF NOT EXISTS `current_relation_members` (
`id` BIGINT(64) NOT NULL,
`member_type` ENUM('node','way','relation') NOT NULL DEFAULT 'node',
`member_id` BIGINT(11) NOT NULL,
`member_role` VARCHAR(255) NOT NULL DEFAULT '',
`sequence_id` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`,`member_type`,`member_id`,`member_role`,`sequence_id`),
KEY `current_relation_members_member_idx` (`member_type`,`member_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `current_relation_tags`
--
DROP TABLE IF EXISTS `current_relation_tags`;
CREATE TABLE IF NOT EXISTS `current_relation_tags` (
`id` BIGINT(64) NOT NULL,
`k` VARCHAR(255) NOT NULL DEFAULT '',
`v` VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`,`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `current_ways`
--
DROP TABLE IF EXISTS `current_ways`;
CREATE TABLE IF NOT EXISTS `current_ways` (
`id` BIGINT(64) NOT NULL AUTO_INCREMENT,
`changeset_id` BIGINT(20) NOT NULL,
`timestamp` DATETIME NOT NULL,
`visible` TINYINT(1) NOT NULL,
`version` BIGINT(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `current_ways_timestamp_idx` (`timestamp`),
KEY `changeset_id` (`changeset_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=31336923 ;
-- --------------------------------------------------------
--
-- Структура табліцы `current_way_nodes`
--
DROP TABLE IF EXISTS `current_way_nodes`;
CREATE TABLE IF NOT EXISTS `current_way_nodes` (
`id` BIGINT(64) NOT NULL,
`node_id` BIGINT(64) NOT NULL,
`sequence_id` BIGINT(11) NOT NULL,
PRIMARY KEY (`id`,`sequence_id`),
KEY `current_way_nodes_node_idx` (`node_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `current_way_tags`
--
DROP TABLE IF EXISTS `current_way_tags`;
CREATE TABLE IF NOT EXISTS `current_way_tags` (
`id` BIGINT(64) NOT NULL,
`k` VARCHAR(255) NOT NULL DEFAULT '',
`v` VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`,`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `diary_comments`
--
DROP TABLE IF EXISTS `diary_comments`;
CREATE TABLE IF NOT EXISTS `diary_comments` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`diary_entry_id` BIGINT(20) NOT NULL,
`user_id` BIGINT(20) NOT NULL,
`body` text NOT NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `diary_comments_entry_id_idx` (`diary_entry_id`,`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Структура табліцы `diary_entries`
--
DROP TABLE IF EXISTS `diary_entries`;
CREATE TABLE IF NOT EXISTS `diary_entries` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`user_id` BIGINT(20) NOT NULL,
`title` VARCHAR(255) NOT NULL,
`body` text NOT NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
`latitude` DOUBLE DEFAULT NULL,
`longitude` DOUBLE DEFAULT NULL,
`language` VARCHAR(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Структура табліцы `friends`
--
DROP TABLE IF EXISTS `friends`;
CREATE TABLE IF NOT EXISTS `friends` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`user_id` BIGINT(20) NOT NULL,
`friend_user_id` BIGINT(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id_idx` (`friend_user_id`),
KEY `friends_user_id_idx` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Структура табліцы `gps_points`
--
DROP TABLE IF EXISTS `gps_points`;
CREATE TABLE IF NOT EXISTS `gps_points` (
`altitude` FLOAT DEFAULT NULL,
`trackid` INT(11) NOT NULL,
`latitude` INT(11) NOT NULL,
`longitude` INT(11) NOT NULL,
`gpx_id` BIGINT(64) NOT NULL,
`timestamp` DATETIME DEFAULT NULL,
`tile` INT(10) UNSIGNED NOT NULL,
KEY `points_gpxid_idx` (`gpx_id`),
KEY `points_tile_idx` (`tile`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `gpx_files`
--
DROP TABLE IF EXISTS `gpx_files`;
CREATE TABLE IF NOT EXISTS `gpx_files` (
`id` BIGINT(64) NOT NULL AUTO_INCREMENT,
`user_id` BIGINT(20) NOT NULL,
`visible` TINYINT(1) NOT NULL DEFAULT '1',
`name` VARCHAR(255) NOT NULL DEFAULT '',
`size` BIGINT(20) DEFAULT NULL,
`latitude` DOUBLE DEFAULT NULL,
`longitude` DOUBLE DEFAULT NULL,
`timestamp` DATETIME NOT NULL,
`public` TINYINT(1) NOT NULL DEFAULT '1',
`description` VARCHAR(255) NOT NULL DEFAULT '',
`inserted` TINYINT(1) NOT NULL,
PRIMARY KEY (`id`),
KEY `gpx_files_timestamp_idx` (`timestamp`),
KEY `gpx_files_visible_public_idx` (`visible`,`public`),
KEY `gpx_files_user_id_idx` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Структура табліцы `gpx_file_tags`
--
DROP TABLE IF EXISTS `gpx_file_tags`;
CREATE TABLE IF NOT EXISTS `gpx_file_tags` (
`gpx_id` BIGINT(64) NOT NULL DEFAULT '0',
`tag` VARCHAR(255) NOT NULL,
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
KEY `gpx_file_tags_gpxid_idx` (`gpx_id`),
KEY `gpx_file_tags_tag_idx` (`tag`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Структура табліцы `messages`
--
DROP TABLE IF EXISTS `messages`;
CREATE TABLE IF NOT EXISTS `messages` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`from_user_id` BIGINT(20) NOT NULL,
`title` VARCHAR(255) NOT NULL,
`body` text NOT NULL,
`sent_on` DATETIME NOT NULL,
`message_read` TINYINT(1) NOT NULL DEFAULT '0',
`to_user_id` BIGINT(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `messages_to_user_id_idx` (`to_user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Структура табліцы `nodes`
--
DROP TABLE IF EXISTS `nodes`;
CREATE TABLE IF NOT EXISTS `nodes` (
`id` BIGINT(64) NOT NULL,
`latitude` INT(11) NOT NULL,
`longitude` INT(11) NOT NULL,
`changeset_id` BIGINT(20) NOT NULL,
`visible` TINYINT(1) NOT NULL,
`timestamp` DATETIME NOT NULL,
`tile` INT(10) UNSIGNED NOT NULL,
`version` BIGINT(20) NOT NULL,
PRIMARY KEY (`id`,`version`),
KEY `nodes_timestamp_idx` (`timestamp`),
KEY `nodes_tile_idx` (`tile`),
KEY `changeset_id` (`changeset_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `node_tags`
--
DROP TABLE IF EXISTS `node_tags`;
CREATE TABLE IF NOT EXISTS `node_tags` (
`id` BIGINT(64) NOT NULL,
`version` BIGINT(20) NOT NULL,
`k` VARCHAR(255) NOT NULL DEFAULT '',
`v` VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`,`version`,`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `relations`
--
DROP TABLE IF EXISTS `relations`;
CREATE TABLE IF NOT EXISTS `relations` (
`id` BIGINT(64) NOT NULL DEFAULT '0',
`changeset_id` BIGINT(20) NOT NULL,
`timestamp` DATETIME NOT NULL,
`version` BIGINT(20) NOT NULL,
`visible` TINYINT(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`,`version`),
KEY `relations_timestamp_idx` (`timestamp`),
KEY `changeset_id` (`changeset_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `relation_members`
--
DROP TABLE IF EXISTS `relation_members`;
CREATE TABLE IF NOT EXISTS `relation_members` (
`id` BIGINT(64) NOT NULL DEFAULT '0',
`member_type` ENUM('node','way','relation') NOT NULL DEFAULT 'node',
`member_id` BIGINT(11) NOT NULL,
`member_role` VARCHAR(255) NOT NULL DEFAULT '',
`version` BIGINT(20) NOT NULL DEFAULT '0',
`sequence_id` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`,`version`,`member_type`,`member_id`,`member_role`,`sequence_id`),
KEY `relation_members_member_idx` (`member_type`,`member_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `relation_tags`
--
DROP TABLE IF EXISTS `relation_tags`;
CREATE TABLE IF NOT EXISTS `relation_tags` (
`id` BIGINT(64) NOT NULL DEFAULT '0',
`k` VARCHAR(255) NOT NULL DEFAULT '',
`v` VARCHAR(255) NOT NULL DEFAULT '',
`version` BIGINT(20) NOT NULL,
PRIMARY KEY (`id`,`version`,`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `schema_migrations`
--
DROP TABLE IF EXISTS `schema_migrations`;
CREATE TABLE IF NOT EXISTS `schema_migrations` (
`version` VARCHAR(255) NOT NULL,
UNIQUE KEY `unique_schema_migrations` (`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `sessions`
--
DROP TABLE IF EXISTS `sessions`;
CREATE TABLE IF NOT EXISTS `sessions` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`session_id` VARCHAR(255) DEFAULT NULL,
`data` text,
`created_at` DATETIME DEFAULT NULL,
`updated_at` DATETIME DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `sessions_session_id_idx` (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
-- --------------------------------------------------------
--
-- Структура табліцы `users`
--
DROP TABLE IF EXISTS `users`;
CREATE TABLE IF NOT EXISTS `users` (
`email` VARCHAR(255) NOT NULL,
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`active` INT(11) NOT NULL DEFAULT '0',
`pass_crypt` VARCHAR(255) NOT NULL,
`creation_time` DATETIME NOT NULL,
`display_name` VARCHAR(255) NOT NULL DEFAULT '',
`data_public` TINYINT(1) NOT NULL DEFAULT '0',
`description` text NOT NULL,
`home_lat` DOUBLE DEFAULT NULL,
`home_lon` DOUBLE DEFAULT NULL,
`home_zoom` SMALLINT(6) DEFAULT '3',
`nearby` INT(11) DEFAULT '50',
`pass_salt` VARCHAR(255) DEFAULT NULL,
`image` text,
`administrator` TINYINT(1) NOT NULL DEFAULT '0',
`email_valid` TINYINT(1) NOT NULL DEFAULT '0',
`new_email` VARCHAR(255) DEFAULT NULL,
`visible` TINYINT(1) NOT NULL DEFAULT '1',
`creation_ip` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_idx` (`email`),
UNIQUE KEY `users_display_name_idx` (`display_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=101442 ;
-- --------------------------------------------------------
--
-- Структура табліцы `user_preferences`
--
DROP TABLE IF EXISTS `user_preferences`;
CREATE TABLE IF NOT EXISTS `user_preferences` (
`user_id` BIGINT(20) NOT NULL,
`k` VARCHAR(255) NOT NULL,
`v` VARCHAR(255) NOT NULL,
PRIMARY KEY (`user_id`,`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `user_tokens`
--
DROP TABLE IF EXISTS `user_tokens`;
CREATE TABLE IF NOT EXISTS `user_tokens` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`user_id` BIGINT(20) NOT NULL,
`token` VARCHAR(255) NOT NULL,
`expiry` DATETIME NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_tokens_token_idx` (`token`),
KEY `user_tokens_user_id_idx` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Структура табліцы `ways`
--
DROP TABLE IF EXISTS `ways`;
CREATE TABLE IF NOT EXISTS `ways` (
`id` BIGINT(64) NOT NULL DEFAULT '0',
`changeset_id` BIGINT(20) NOT NULL,
`timestamp` DATETIME NOT NULL,
`version` BIGINT(20) NOT NULL,
`visible` TINYINT(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`,`version`),
KEY `ways_timestamp_idx` (`timestamp`),
KEY `changeset_id` (`changeset_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `way_nodes`
--
DROP TABLE IF EXISTS `way_nodes`;
CREATE TABLE IF NOT EXISTS `way_nodes` (
`id` BIGINT(64) NOT NULL,
`node_id` BIGINT(64) NOT NULL,
`version` BIGINT(20) NOT NULL,
`sequence_id` BIGINT(11) NOT NULL,
PRIMARY KEY (`id`,`version`,`sequence_id`),
KEY `way_nodes_node_idx` (`node_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура табліцы `way_tags`
--
DROP TABLE IF EXISTS `way_tags`;
CREATE TABLE IF NOT EXISTS `way_tags` (
`id` BIGINT(64) NOT NULL DEFAULT '0',
`k` VARCHAR(255) NOT NULL,
`v` VARCHAR(255) NOT NULL,
`version` BIGINT(20) NOT NULL,
PRIMARY KEY (`id`,`version`,`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Абмежаваньні для экспартаваных табліц
--
--
-- Абмежаваньні для табліцы `current_nodes`
--
ALTER TABLE `current_nodes`
ADD CONSTRAINT `current_nodes_ibfk_1` FOREIGN KEY (`changeset_id`) REFERENCES `changesets` (`id`);
--
-- Абмежаваньні для табліцы `current_node_tags`
--
ALTER TABLE `current_node_tags`
ADD CONSTRAINT `current_node_tags_ibfk_1` FOREIGN KEY (`id`) REFERENCES `current_nodes` (`id`);
--
-- Абмежаваньні для табліцы `current_relations`
--
ALTER TABLE `current_relations`
ADD CONSTRAINT `current_relations_ibfk_1` FOREIGN KEY (`changeset_id`) REFERENCES `changesets` (`id`);
--
-- Абмежаваньні для табліцы `current_relation_members`
--
ALTER TABLE `current_relation_members`
ADD CONSTRAINT `current_relation_members_ibfk_1` FOREIGN KEY (`id`) REFERENCES `current_relations` (`id`);
--
-- Абмежаваньні для табліцы `current_relation_tags`
--
ALTER TABLE `current_relation_tags`
ADD CONSTRAINT `current_relation_tags_ibfk_1` FOREIGN KEY (`id`) REFERENCES `current_relations` (`id`);
--
-- Абмежаваньні для табліцы `current_ways`
--
ALTER TABLE `current_ways`
ADD CONSTRAINT `current_ways_ibfk_1` FOREIGN KEY (`changeset_id`) REFERENCES `changesets` (`id`);
--
-- Абмежаваньні для табліцы `current_way_nodes`
--
ALTER TABLE `current_way_nodes`
ADD CONSTRAINT `current_way_nodes_ibfk_2` FOREIGN KEY (`node_id`) REFERENCES `current_nodes` (`id`),
ADD CONSTRAINT `current_way_nodes_ibfk_1` FOREIGN KEY (`id`) REFERENCES `current_ways` (`id`);
--
-- Абмежаваньні для табліцы `current_way_tags`
--
ALTER TABLE `current_way_tags`
ADD CONSTRAINT `current_way_tags_ibfk_1` FOREIGN KEY (`id`) REFERENCES `current_ways` (`id`);
--
-- Абмежаваньні для табліцы `nodes`
--
ALTER TABLE `nodes`
ADD CONSTRAINT `nodes_ibfk_1` FOREIGN KEY (`changeset_id`) REFERENCES `changesets` (`id`);
--
-- Абмежаваньні для табліцы `node_tags`
--
ALTER TABLE `node_tags`
ADD CONSTRAINT `node_tags_ibfk_1` FOREIGN KEY (`id`, `version`) REFERENCES `nodes` (`id`, `version`);
--
-- Абмежаваньні для табліцы `relations`
--
ALTER TABLE `relations`
ADD CONSTRAINT `relations_ibfk_1` FOREIGN KEY (`changeset_id`) REFERENCES `changesets` (`id`);
--
-- Абмежаваньні для табліцы `relation_members`
--
ALTER TABLE `relation_members`
ADD CONSTRAINT `relation_members_ibfk_1` FOREIGN KEY (`id`, `version`) REFERENCES `relations` (`id`, `version`);
--
-- Абмежаваньні для табліцы `relation_tags`
--
ALTER TABLE `relation_tags`
ADD CONSTRAINT `relation_tags_ibfk_1` FOREIGN KEY (`id`, `version`) REFERENCES `relations` (`id`, `version`);
--
-- Абмежаваньні для табліцы `ways`
--
ALTER TABLE `ways`
ADD CONSTRAINT `ways_ibfk_1` FOREIGN KEY (`changeset_id`) REFERENCES `changesets` (`id`);
--
-- Абмежаваньні для табліцы `way_nodes`
--
ALTER TABLE `way_nodes`
ADD CONSTRAINT `way_nodes_ibfk_1` FOREIGN KEY (`id`, `version`) REFERENCES `ways` (`id`, `version`);
--
-- Абмежаваньні для табліцы `way_tags`
--
ALTER TABLE `way_tags`
ADD CONSTRAINT `way_tags_ibfk_1` FOREIGN KEY (`id`, `version`) REFERENCES `ways` (`id`, `version`);