The query
insert into places (name,type,parent_id) select w.accent_city,'Feature',p.id from worldcities w join regions_fips r on w.iso_region = r.fips_region join places p on r.fips_region = p.abreviation where p.type = 'Region'; |
The structure
mysql> show create table regions_fips \G
*************************** 1. row ***************************
Table: regions_fips
Create Table: CREATE TABLE `regions_fips` (
`iso_country` varchar(2) default NULL,
`fips_region` varchar(2) default NULL,
`name` varchar(255) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> show create table places \G
*************************** 1. row ***************************
Table: places
Create Table: CREATE TABLE `places` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`permalink` varchar(255) default NULL,
`parent_id` int(11) default NULL,
`abreviation` varchar(3) default NULL,
`type` varchar(255) default NULL,
`is_approved` tinyint(1) NOT NULL default '0',
`permalinks` varchar(255) default NULL,
`pictures_permalinks` varchar(255) default NULL,
`picture_id` int(11) default NULL,
`pictures_count` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> show create table worldcities \G
*************************** 1. row ***************************
Table: worldcities
Create Table: CREATE TABLE `worldcities` (
`iso_country` varchar(2) default NULL,
`city` varchar(255) default NULL,
`accent_city` varchar(255) default NULL,
`iso_region` varchar(2) default NULL,
`longitude` float default NULL,
`latitude` float default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
|
Explain
EXPLAIN select w.accent_city,'Feature',p.id from worldcities w join regions_fips r on w.iso_region = r.fips_region join places p on r.fips_region = p.abreviation where p.type = 'Region' +----+-------------+-------+------+---------------+------+---------+------+---------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+---------+-------------+ | 1 | SIMPLE | r | ALL | NULL | NULL | NULL | NULL | 4417 | | | 1 | SIMPLE | p | ALL | NULL | NULL | NULL | NULL | 238275 | Using where | | 1 | SIMPLE | w | ALL | NULL | NULL | NULL | NULL | 2659856 | Using where | +----+-------------+-------+------+---------------+------+---------+------+---------+-------------+ |
The status of the tables
mysql> SHOW TABLE STATUS LIKE 'places' \G
*************************** 1. row ***************************
Name: places
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 238275
Avg_row_length: 59
Data_length: 14172160
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: 252808
Create_time: 2007-05-10 22:03:25
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment: InnoDB free: 120832 kB
1 row in set (0.06 sec)
mysql> SHOW TABLE STATUS LIKE 'worldcities' \G
*************************** 1. row ***************************
Name: worldcities
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 2659856
Avg_row_length: 65
Data_length: 174800896
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2007-06-12 18:28:04
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment: InnoDB free: 120832 kB
1 row in set (0.06 sec)
mysql> SHOW TABLE STATUS LIKE 'regions_fips' \G
*************************** 1. row ***************************
Name: regions_fips
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 4417
Avg_row_length: 48
Data_length: 212992
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2007-06-12 18:28:04
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment: InnoDB free: 120832 kB
1 row in set (0.00 sec)
|
my.cnf
# /etc/mysql/my.cnf: The global mysql configuration file. # $Header: /var/cvsroot/gentoo-x86/dev-db/mysql/files/my.cnf-4.1,v 1.3 2006/05/05 19:51:40 chtekk Exp $ # The following options will be passed to all MySQL clients [client] #password = your_password port = 3306 socket = /var/run/mysqld/mysqld.sock [mysql] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqladmin] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqlcheck] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqldump] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqlimport] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqlshow] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [myisamchk] character-sets-dir=/usr/share/mysql/charsets [myisampack] character-sets-dir=/usr/share/mysql/charsets # use [safe_mysqld] with mysql-3 [mysqld_safe] err-log = /var/log/mysql/mysql.err # add a section [mysqld-4.1] or [mysqld-5.0] for specific configurations [mysqld] character-set-server = utf8 default-character-set = utf8 user = mysql port = 3306 socket = /var/run/mysqld/mysqld.sock pid-file = /var/run/mysqld/mysqld.pid log-error = /var/log/mysql/mysqld.err basedir = /usr datadir = /var/lib/mysql skip-locking key_buffer = 16M max_allowed_packet = 1M table_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M language = /usr/share/mysql/english # security: # using "localhost" in connects uses sockets by default skip-networking bind-address = 127.0.0.1 log-bin server-id = 1 # point the following paths to different dedicated disks tmpdir = /tmp/ #log-update = /path-to-dedicated-directory/hostname # you need the debug USE flag enabled to use the following directives, # if needed, uncomment them, start the server and issue # #tail -f /tmp/mysqld.sql /tmp/mysqld.trace # this will show you *exactly* what's happening in your server ;) #log = /tmp/mysqld.sql #gdb #debug = d:t:i:o,/tmp/mysqld.trace #one-thread # uncomment the following directives if you are using BDB tables #bdb_cache_size = 4M #bdb_max_lock = 10000 # the following is the InnoDB configuration # if you wish to disable innodb instead # uncomment just the next line #skip-innodb # # the rest of the innodb config follows: # don't eat too much memory, we're trying to be safe on 64Mb boxes # you might want to bump this up a bit on boxes with more RAM innodb_buffer_pool_size = 32M # this is the default, increase it if you have lots of tables innodb_additional_mem_pool_size = 2M # # i'd like to use /var/lib/mysql/innodb, but that is seen as a database :-( # and upstream wants things to be under /var/lib/mysql/, so that's the route # we have to take for the moment #innodb_data_home_dir = /var/lib/mysql/ #innodb_log_arch_dir = /var/lib/mysql/ #innodb_log_group_home_dir = /var/lib/mysql/ # you may wish to change this size to be more suitable for your system # the max is there to avoid run-away growth on your machine innodb_data_file_path = ibdata1:10M:autoextend # we keep this at around 25% of of innodb_buffer_pool_size # sensible values range from 1MB to (1/innodb_log_files_in_group*innodb_buffer_pool_size) innodb_log_file_size = 5M # this is the default, increase it if you have very large transactions going on innodb_log_buffer_size = 8M # this is the default and won't hurt you # you shouldn't need to tweak it set-variable = innodb_log_files_in_group=2 # see the innodb config docs, the other options are not always safe innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 [mysqldump] quick max_allowed_packet = 16M [mysql] # uncomment the next directive if you are not familiar with SQL #safe-updates [isamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [myisamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout |

