ホームページ >データベース >mysql チュートリアル >mysqlのクロスデータベースクエリの問題を解決する方法
1. クロスデータベース クエリの最初のタイプは、同じ mysql サーバーにある 2 つの異なるデータベース間の共同クエリです。その関係は、以下の
に示されているとおりです。同じ mysql サーバーでは、2 つの異なるデータをデータベース名に直接追加して、データベース間クエリを実現できます。
#select * from t_test1 t1, test2.t_test2 t2 where t1.id = t2.id
SQL クエリを実行して結果を取得します
2. 2 番目のタイプのクロスデータベース クエリは、クロスデータベース クエリを実装するために 2 つの異なるサーバー (物理サーバー) にインストールされた mysql サーバーです。実装原理は仮想マッピングに似ています。 mysql の別のストレージ エンジンである Federated を使用する必要があります。FEDERATED ストレージ エンジンは、ローカル テーブルではなくリモート データベースのテーブルのデータにアクセスします。
この機能は、一部の開発アプリケーションに利便性をもたらします。フェデレーテッド テーブルをローカルに直接構築して、リモート データ テーブルに接続できます。構成後、ローカル テーブルのデータをリモート データ テーブルと直接同期できます。実際、このエンジンは実際にデータを保存するのではなく、必要なデータは他の MySQL サーバーに接続することによって取得されます。
mysql はデフォルトではフェデレーテッド ストレージ エンジンを有効にしないため、構成ファイルで有効にする必要があります;
#在[mysqld] 下 添加 federated 然后重启mysql服务就可以了 [mysqld] federated
以下に示すように:
#输入命令查看引擎开启状态 show engines;
が表示され、オンになっています
次に、test1 データベースに仮想テーブルを作成し、test2 ライブラリの t_test2 テーブルを test1 ライブラリにマップできます。
CREATE TABLE `t_test2` ( `id` int NOT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=FEDERATED DEFAULT CHARSET=utf8mb3 COMMENT='远程测试表t_test2' CONNECTION='mysql://root:123456@127.0.0.1:3306/test2/t_test2' ; /** CONNECTION='mysql://root:123456$@127.0.0.1:3306/test2/t_test2' 这个配置是关键 root:代表远程数据库的用户 123456:代表远程数据的密码 127.0.0.1:代表远程数据库的ip地址,域名也可以 test2:代表远程数据库的数据库名称 t_test2:代表远程数据库中的哪一张表 **/
SQL ステートメントの実行
テーブル t_test2 が作成されたことがわかります。このテーブルは実際には存在せず、単なるリモート マッピングです
FEDERATED エンジンを使用するとわかります
テーブルの作成後、sql
select * from t_test1 t1, t_test2 t2 where t1.id = t2.id# を記述できます。 ##実行結果を確認できます
#フェデレーション使用上の注意:1. ローカルで作成されたテーブル名はリモート サーバー上に存在する必要があり、作成されたフィールドは、リモート テーブルのフィールドでもある必要があります。これは、「リモート テーブルのフィールドは少ないですが、それ以上ではありません。ローカル ストレージ エンジン 2 を選択してください。ローカル仮想テーブルの構造を変更しても、変更されません。」リモート テーブルの構造を変更します 3. truncate コマンドはリモート テーブル データをクリアします 4.drop コマンドは仮想テーブルのみを削除し、リモート テーブル
## は削除しません#5. select count(*)、select * from limit M、N などのステートメントを実行する 効率は非常に低く、データ量が多い場合には重大な問題が発生しますが、主キーまたはインデックス列によるクエリは非常に効率的です。たとえば、次のクエリは非常に遅いです (ID がメイン インデックスであると仮定します)
select id from db.tablea where id >100 limit 10 ;
以上がmysqlのクロスデータベースクエリの問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。