問題タブ [mariadb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - MariaDB 対 Drizzle 対 Percona Server 対 MySQL
私は長い間 MySQL ユーザーでした。最も人気のあるフォークのさまざまなバリエーションをすべて使い始めたいと思います。問題は、それらの間に適切な比較が見つからないことであり、それらすべてを試すことになります. 私が懸念しているのは生産に関するものです。なぜなら、これらすべてのフォークを生産で実験するつもりはないからです。
本番環境で MySQL フォークを実行したことがありますか?
利点は何ですか?短所は何ですか?
mysql - 他の列の順序に基づいて、グループから 1 つの値を選択します
問題
このテーブルがあるとしますtab
(フィドルが利用可能です)。
で行をグループ化してg
おり、グループごとに column から 1 つの値が必要ですv
。ただし、値は必要ありませんがa
、 maximal を含む行と、それらすべてからmaximal を含む行の値が必要ですb
。言い換えれば、私の結果は
現在のソリューション
これを達成するためのクエリを知っています:
質問
しかし、私はこのクエリはかなり醜いと考えています。主に依存サブクエリを使用しているため、実際のパフォーマンスキラーのように感じます. したがって、この問題に対するより簡単な解決策があるかどうか疑問に思っています。
予想される答え
この質問に対する最も可能性の高い答えは、このための機能を提供する MySQL (または MariaDB) のアドオンまたはパッチのようなものです。しかし、他の有用なインスピレーションも歓迎します。依存サブクエリなしで機能するものはすべて、回答として適格です。
cat
あなたの解決策が単一の順序付け列でのみ機能する場合、つまりとを区別できなかった場合はhorse
、その回答を自由に提案してください。大多数のユース ケースでも役立つと思います。たとえば100*a+b
、単一の式のみを使用しながら、両方の列で上記のデータを並べ替える可能性が高い方法です。
私はかなりハックな解決策をいくつか考えていて、しばらくしたら追加するかもしれませんが、最初にいくつかの素晴らしい新しい解決策が最初に流れ込むかどうかを確認します.
ベンチマーク結果
さまざまな回答を見て比較するのはかなり難しいため、いくつかのベンチマークを実行しました。これは、MySQL 5.1 を使用して、自分のデスクトップで実行しました。数値は他のシステムと比較することはできません。相互に比較するだけです。アプリケーションにとってパフォーマンスが重要な場合は、実際のデータを使用して独自のテストを行う必要があります。新しい回答が得られたら、それらをスクリプトに追加して、すべてのテストを再実行します。
- 100,000 項目、1,000 グループから選択可能、InnoDb:
- MvGで0.166秒(質問より)
- RichardTheKiwi の場合は0.520 秒
- xdazz で2.199 秒
- Dems の場合は 19.24 秒(順次サブクエリ)
- acatt の場合は48.72 秒
- 100,000 項目、50,000 グループから選択可能、InnoDb:
- xdazz の場合は0.356 秒
- RichardTheKiwi の場合は0.640 秒
- MvGで0.764秒(質問より)
- acatt の場合は51.50 秒
- Demsには長すぎます(順次サブクエリ)
- 100,000 項目、100 グループから選択可能、InnoDb:
- MvGで0.163秒(質問より)
- RichardTheKiwi の場合は0.523 秒
- Dems の場合は 2.072 秒(順次サブクエリ)
- xdazzの場合は17.78秒
- acatt の場合は49.85 秒
したがって、従属サブクエリを使用しても、これまでのところ私自身のソリューションはそれほど悪くはないようです。驚くべきことに、従属サブクエリも使用する acatt によるソリューションのパフォーマンスははるかに悪いものです。おそらく、MySQL オプティマイザが対処できないものです。RichardTheKiwi が提案したソリューションは、全体的なパフォーマンスも優れているようです。他の 2 つのソリューションは、データの構造に大きく依存します。多くのグループと小さなグループでは、xdazz のアプローチは他のすべてのアプローチよりも優れていますが、Dems によるソリューションは少数の大規模なグループでは最高のパフォーマンスを発揮します (それでも例外的に良くはありません)。
mysql - MySQLシステムデータベーステーブルをInnoDBに変換できますか?
最近MySQL5.5をインストールしました。私はInnoDB
すべてのデータベースのエンジンとして使用しています。mysql
データベースのデフォルトとそのすべてのテーブル(user、dbなど)がである ことに気づきましたMyISAM
。彼らができない/すべきではない理由はありますInnoDB
か?mysql
MySQLがデータベースを必要とするかどうか誰かが知っていますMyISAM
か?
mysql - なぜ私のMySQLグループはとても遅いのですか?
2,000万行に近づいているパーティションテーブル(月ごと)に対してクエリを実行しようとしています。DATE(transaction_utc)とcountry_idでグループ化する必要があります。group byをオフにして集計した場合に返される行は、40kをわずかに超えていますが、これはそれほど多くはありませんが、group BYがtransaction_utc列にある場合を除き、group byを追加すると、クエリが大幅に遅くなります。速くなります。
私はクエリやインデックスを微調整することでこの最初のクエリを最適化しようとしてきましたが、以下のポイントに到達しました(最初の約2倍の速さ)が、45k行を要約するための5sクエリに固執しました。過度に。
参考までに、このボックスは真新しい24論理コア、64GB RAM、Mariadb-5.5.xサーバーであり、サーバー上のインデックススペースよりもはるかに多くのINNODBバッファープールを使用できるため、RAMやCPUに負荷がかかることはありません。
だから、私はこの減速を引き起こしているものについてのアイデアとそれをスピードアップするための提案を探しています。フィードバックをいただければ幸いです。:)
わかりました、詳細に...
次のクエリ(実際に必要なクエリ)は約5秒(+/-)かかり、100行未満を返します。
同じクエリのEXPLAINSELECTは次のとおりです。transaction_utcキーを使用していないことに注意してください。代わりに私のカバーインデックスを使用するべきではありませんか?
今、私が何が起こっているのかを判断しようとした他のいくつかのオプションに移ります...
次のクエリ(group byで変更)は約5秒(+/-)かかり、3行のみを返します。
次のクエリ(group byで削除)は4〜5秒(+/-)かかり、1行を返します。
次のクエリは.00X秒(+/-)かかり、最大45k行を返します。これは、最大で45K行を100未満のグループにグループ化しようとしていることを示しています(私の最初のクエリのように):
テーブルスキーマ:
mysql - ダンプ ファイル (.dbo ファイル) を mariadb データベースにロードする
ファイルが.dbo
あり、ダンプ ファイルを mariadb にロードする必要があります。それはどのように可能ですか?MySQLでは、次のように試しました:
mysql -u root -p dbname -e " source path/test.dbo"
しかし、これは MariaDB では機能しません。
アイデアはありますか?PostgreSQLで同じようにする方法は?
mariadb - mariadbのデータディレクトリを変更する
Iamがmariadbのデータディレクトリを変更しようとしています。iniファイルのデータディレクトリパスを変更した後、サービスを再起動しようとしましたが、起動できませんでした。次のような警告を表示します:
MySQLでは、データディレクトリの変更は完全に機能しています。しかし、なぜ同じことがうまくいかないのかわかりませんmariadb
。
デフォルトのパスのみが機能しています...
mysql - LOADDATAINFILEがmariadbで機能しない
Iamはmysqlからmariadbに移行しようとしています。このとき、私はmariadbの問題に直面する可能性があります。
データファイルをテーブルにロードしようとすると、次のようなエラーが表示されます。
SQLエラー(29):ファイル'C:/ Documents and Settings / Administrator / Local Settings / Temp / SAMPLE / DATA_TEMP1351761841668 / SampleFile0' not found(Errcode:2)
しかし、ファイルはすでにパスに存在しています...。
もう1つのポイントは、同じコマンドがMySQLで正常に機能することです。MariaDBに権限の問題はありますか?
以下の私のクエリを参照してください:
"C:/SampleFile0",
正常に動作するようにパスを変更する場合。Administrator
それが機能していないフォルダからのパス。
誰かがこの点で私を助けることができますか?IamはMariaDBの新人です。
mysql - 切り捨てテーブルがMariaDBでハングする
Iamはmysqlからmariadbに移行しようとしています。今回は、mariadbで別の問題に直面する可能性があります。
TRUNCATE TABLE
クエリがハングすることがあります。しかし、MySQLでは、この問題は発生していません。
誰かがこの点で私を助けることができますか?IamはMariaDBの新人です。
mysql - MyIsam ストレージ エンジンにのみ適用される最も一般的で重要な SQL コマンドは?
最近、古い MyISAM ベースの MySQL デプロイメントを使用して古いレガシー システムを移行することは、InnoDB ベースの MySQL または MariaDB デプロイメントに簡単に置き換えることができないという議論が持ち上がりました。思いついた理由は、MyISAM だけの SQL コマンドがいたるところに多すぎたからです。コードをまだ見ていないので、どの SQL コマンドがどこを参照しているのか気になります。
テーブルのロックに関連する以下のような SEVERAL しか知りません。理論上はおそらく InnoDB でも動作しますが、テーブル ロックをサポートする MyISAM 、 MERGE
、およびストレージ エンジンにより適しています。MEMORY
もっとある場合は、そのコレクションを教えてください。高く評価されます。
- 編集 -
見つけたものはすべてこの行の下に置きます。