最近、特に異常なビジネス需要があり、テーブルがあります テーブル「デモ」を作成します( `id` int(11) 符号なし NOT NULL AUTO_INCREMENT, `tid` int(11) デフォルト '0', `pid` int(11) デフォルト '1', 主キー (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3000124 デフォルトCHARSET=utf8; 以上です。レコードの行数は 300 万行を超えます。各 pid はこの ID の最上位カテゴリを記録し、tid はその親カテゴリです。 Oracle には connect_by_isleaf というメソッドがあり、すべてのサブセットを簡単に見つけることができますが、私は MySQL を使用しています... そこで、ここではMySQLメソッドやストアドプロシージャを使用して実装した経験について簡単に書きます。 1つ目: MySQL方式 CREATE DEFINER=`root`@`localhost` FUNCTION `lvtao_demo_a`(rootId int) 戻り値 text CHARSET utf8 SQLデータの読み取り コメント「デモ」 始める sTemp テキストを宣言します。 sTempChd テキストを宣言します。 SET sTempChd =cast(rootId を CHAR として)。 sTemp を '' に設定します。 sTempChdがnullではない場合 SET sTemp = concat(sTemp,',',sTempChd); SELECT group_concat(id) INTO sTempChd FROM demo where FIND_IN_SET(tid,sTempChd)>0; 終了しながら; sTemp を返します。 終わり; 使用方法は lvtao_demo_a(5)を選択します。 しかし、テストしていたところ、300 万個のデータがクラッシュしてしまいました。 ! ! 行 1 の列 'sTemp' のデータが長すぎます 利点: シンプル、便利、再帰呼び出しレベルの深さに制限なし (max_sp_recursion_depth、最大 255)。 2番目のタイプ: ストアドプロシージャ + 中間テーブル 区切り文字 ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `sss`(IN pid int, IN rootid int) 始める done INT DEFAULT FALSE を宣言します。 id TEXT を宣言します。 DECLARE cur1 CURSOR FOR SELECT id FROM demo WHERE tid=pid; NOT FOUND SET done = TRUE の継続ハンドラーを宣言します。 max_sp_recursion_depth を 200 に設定します。 オープンcur1; read_loop: ループ cur1 を id にフェッチします。 完了したら read_loop を終了します。 終了の場合; INSERT INTO temp (rootid,zid) values (rootid, id); sss(id,rootid) を呼び出します。 ループを終了; cur1 を閉じます。 終わり;; 区切り文字 ; ハハハ、300万のデータもボールの中に詰まってるよ〜〜〜 別の方法を考えよう~~~~もうこれ以上は気にしない 以下もご興味があるかもしれません:
|
>>: Docker で ElasticSearch をデプロイする方法
これらの 3 つのタグを間違った方法で使用して、タイトルを表に沿わせたり、tbody の高さを固定し...
c3p0の使用c3p0jarパッケージをインポートする <!-- https://mvnrep...
この記事の例では、Baidu検索ボックスを実装するためのJSの具体的なコードを参考までに共有していま...
重複キーの置換と挿入の違い置換の使用法競合がない場合、挿入と同等となり、他の列のデフォルト値が使用さ...
docker-compose.ymlを作成し、次の内容を入力します。 バージョン: '3...
マイグレーションMySQL 入門MySQL はもともとオープンソースのリレーショナル データベース管...
<br />前回は、Web テーブルにセルの線を設定する方法を学びました。今日は、Web...
実際、この効果を実現するのは非常に簡単で、この効果は特殊効果と呼ぶことすらできません。次のコードを ...
序文テーブルを削除するには、無意識に思い浮かぶコマンドは、DROP TABLE "テーブル...
目次リアクティブ機能使用法: toRef 関数 (理解するだけ)使用法: ref関数レスポンシブデー...
コードをコピーコードは次のとおりです。 <スタイル タイプ="text/css&qu...
vi/vim の紹介どちらもマルチモード エディターです。違いは、vim が vi のアップグレー...
JBoss は Tomcat を Web コンテナとして使用するため、JBoss の Web コンテ...
1. Canvas画像をCSS背景画像として使用するCSS ペイント API は、Canvas キャ...
各データベース内の各テーブルのサイズをカウントすることは、データ ガバナンスの最も単純な要件の 1 ...