MySQL question: create table if not exists

Dear MySQL gurus, So I have this query: *CREATE TABLE IF NOT EXISTS my_table_a ( SELECT * FROM my_table_b WHERE some_column=some_value);* My question is, how does MySQL evaluate it? Does it start with the SELECT * then goes to check if that table exists, then creates the table? The reason I am asking is because the *SELECT * FROM my_table_b WHERE some_column=some_value *part is particularly nasty and takes forever, and therefore, I was thinking of splitting it into two thus: 1. $x = SELECT COUNT(1) FROM information_schema.tables WHERE table_schema='my_db' AND table_name='my_table_a' 2. if ( ! $x ) { CREATE TABLE my_table_a ( SELECT * FROM my_table_b WHERE some_column=some_value); } And therefore, possibly save a few seconds. Or am I searching for speed in the wrong place?

It probably checks the information_schema database which has all of that information. -- Kili.io - OpenStack for Africa: kili.io Musings: twitter.com/varud <https://twitter.com/varud> About Adam: www.linkedin.com/in/adamcnelson On Wed, Oct 23, 2013 at 12:38 PM, Peter Karunyu <pkarunyu@gmail.com> wrote:
Dear MySQL gurus,
So I have this query:
*CREATE TABLE IF NOT EXISTS my_table_a ( SELECT * FROM my_table_b WHERE some_column=some_value);*
My question is, how does MySQL evaluate it? Does it start with the SELECT * then goes to check if that table exists, then creates the table?
The reason I am asking is because the *SELECT * FROM my_table_b WHERE some_column=some_value *part is particularly nasty and takes forever, and therefore, I was thinking of splitting it into two thus:
1. $x = SELECT COUNT(1) FROM information_schema.tables WHERE table_schema='my_db' AND table_name='my_table_a' 2. if ( ! $x ) { CREATE TABLE my_table_a ( SELECT * FROM my_table_b WHERE some_column=some_value); }
And therefore, possibly save a few seconds.
Or am I searching for speed in the wrong place?
_______________________________________________ skunkworks mailing list skunkworks@lists.my.co.ke ------------ List info, subscribe/unsubscribe http://lists.my.co.ke/cgi-bin/mailman/listinfo/skunkworks ------------
Skunkworks Rules http://my.co.ke/phpbb/viewtopic.php?f=24&t=94 ------------ Other services @ http://my.co.ke

Yes it starts with the SELECT then executes the CREATE... IF NOT EXISTS is simply meant to suppress errors that the table already exists and from an execution stand point it is no different than if it was left out. In short CREATE always checks if the table exists before creating it In addition to your solution you can also run a simple query directly on the table (SELECT Id FROM table ) and if it returns NULL then the table doesn't exist so you can proceed and create it ----- Original Message ----- | From: "Peter Karunyu" <pkarunyu@gmail.com> | To: "Skunkworks forum" <skunkworks@lists.my.co.ke> | Sent: Miércoles, 23 de Octubre 2013 10:38:07 | Subject: [Skunkworks] MySQL question: create table if not exists | Dear MySQL gurus, | So I have this query: | CREATE TABLE IF NOT EXISTS my_table_a ( SELECT * FROM my_table_b | WHERE some_column=some_value); | My question is, how does MySQL evaluate it? Does it start with the | SELECT * then goes to check if that table exists, then creates the | table? | The reason I am asking is because the SELECT * FROM my_table_b WHERE | some_column=some_value part is particularly nasty and takes forever, | and therefore, I was thinking of splitting it into two thus: | 1. $x = SELECT COUNT(1) FROM information_schema.tables WHERE | table_schema='my_db' AND table_name='my_table_a' | 2. if ( ! $x ) { CREATE TABLE my_table_a ( SELECT * FROM my_table_b | WHERE some_column=some_value); } | And therefore, possibly save a few seconds. | Or am I searching for speed in the wrong place? | _______________________________________________ | skunkworks mailing list | skunkworks@lists.my.co.ke | ------------ | List info, subscribe/unsubscribe | http://lists.my.co.ke/cgi-bin/mailman/listinfo/skunkworks | ------------ | Skunkworks Rules | http://my.co.ke/phpbb/viewtopic.php?f=24&t=94 | ------------ | Other services @ http://my.co.ke
participants (3)
-
Adam Nelson
-
Peter Karunyu
-
Steve Obbayi