用途が無いので、業務で利用した事はありませんが以下のように
2つのテーブルをFROM句のあとに置くとデータは以下のようにそれぞれの
列を掛け算した分だけ結果が返ってくる。

以下の例だとそれぞれのテーブルに4件ずつのデータが入っているので
4X4=16件のデータが表示されます。これがもしデータ量が多いテーブルだと
相当時間がかかり重たくなります。

select * from MYSQLIMP,MYSQLIMP2;
select_join

データ量が多いテーブルの場合
mysql> SET @CityCount = (SELECT COUNT(*) FROM City);
Query OK, 0 rows affected (0.00 sec)

mysql> SET @CountryCount = (SELECT COUNT(*) FROM Country);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @CityCount * @CountryCount;
+—————————-+
| @CityCount * @CountryCount |
+—————————-+
| 979440 |
+—————————-+
1 row in set (0.00 sec)

979440件のデータが表示されると重たい…
select_all1

INFORMATION_SCHEMAのテーブルを利用してテーブル結合の検証

information_schema_tables_join

mysql> select count(*) from SCHEMATA;
+———-+
| count(*) |
+———-+
| 9 |
+———-+
1 row in set (0.00 sec)

mysql> select count(*) from TABLES;
+———-+
| count(*) |
+———-+
| 159 |
+———-+
1 row in set (0.01 sec)

mysql> set @SCHEMATA = (select count(*) from SCHEMATA);
Query OK, 0 rows affected (0.01 sec)

mysql> set @TABLES = (select count(*) from TABLES);
Query OK, 0 rows affected (0.01 sec)

mysql> select count(*) from SCHEMATA,TABLES;
+———-+
| count(*) |
+———-+
| 1431 |
+———-+
1 row in set (0.01 sec)

mysql> select @SCHEMATA * @TABLES;
+———————+
| @SCHEMATA * @TABLES |
+———————+
| 1431 |
+———————+
1 row in set (0.00 sec)

select_total

SCHEMATAには9件のデータがありTABLESテーブルには159件のデータがあるので、
以下のようなwhere句の条件だと多いデータの多いTABLESの列分(159件)だけデータが表示される。
mysql> select count(*) from SCHEMATA,TABLES
-> where SCHEMATA.SCHEMA_NAME = TABLES.TABLE_SCHEMA;

+———-+
| count(*) |
+———-+
| 159 |
+———-+
1 row in set (0.01 sec)

mysql>

例えば、上記2つのテーブルを利用すると以下のような運用で利用出来る確認用クエリーが作成出来る。
desc_tables

SCHEMA_NAME,テーブルのリストを作成したり

select
SCHEMA_NAME,DEFAULT_COLLATION_NAME,
ENGINE,TABLE_TYPE
from SCHEMATA,TABLES
where SCHEMATA.SCHEMA_NAME = TABLES.TABLE_SCHEMA;

schemeta_table
159 rows in set (0.05 sec)

Comments are closed.

Post Navigation