問題タブ [innodb]

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.

0 投票する
4 に答える
1546 参照

sql - SQL の代替を設計していますか?

私は独自の SQL に相当するもの (DDL+DML) を設計および実装することを考えています...

  1. 純粋なリレーショナル代数言語、および
  2. 洗練された Lisp/Scheme ライクな構文を持つ

MySQL などの RDBMS を想定すると、言語設計作業をどこから開始する必要があるでしょうか? InnoDB などのストレージ エンジン層の上に?

すべての RDBMS 機能が一般的にストレージ エンジンの上にあることを知りませんか? 私の現在の直感的な理解では、RDBMS (MySQL など) を作成するために必要な作業の大部分は、ストレージ エンジン内 (具体的には InnoDB) で既に行われており、必要なのはラッパー言語を作成することだけです。それ。しかし、それが本当なら、そもそもなぜ MySQL が存在するのだろうということも知っています!

0 投票する
7 に答える
481 参照

mysql - あいまいな`id`フィールド

次の2つのテーブルがあります。

次のクエリを実行していますidが、あいまいなエラーが表示されます。

ご覧のとおり、私はid列を選択していません。system.id選択するフィールドのリスト内に配置すると、このエラーは発生しなくなります。残念ながら、このデータの処理方法を返すことはできませんid。ユーザーに表示したくないのです。

また、追加GROUP BY system.systemNameしてもエラーは発生しなくなりましたが、これは最適な解決策ではないようです。

注:LEFT JOINすべてのシステムが組織に割り当てられるわけではないため、これは意図的なものです。

0 投票する
1 に答える
1007 参照

mysql - MySql 外部キー インデックス

カテゴリテーブルに外部キーcategory_idを持つMysqlテーブルproductsを使用しています

外部キー制約が定義されています (Innodb エンジン)。

EXPLAIN SELECT * from products where category_id=1; を実行すると気付きました。

外部キーを使用するため、 type=Range と Key: my_foreign_key が表示されます

しかし、EXPLAIN SELECT * from products where category_id IN (1,10); を実行すると、

全テーブル スキャンを使用します: type=ALL, Key:NULL!!!

皮肉なことに、EXPLAIN SELECT * from products where category_id IN (1,2); を実行すると、type-range と Key: My_foreign_key を使用します!

したがって、category_id が連続していない値を使用する場合に問題があると思います。

理由はありますか?

ありがとう

0 投票する
8 に答える
5423 参照

mysql - MySQLクエリはランダムに「永久に」かかります

MySQL を使用して情報を保存する XMPP アプリケーションがあります。これまでのところ、特定の負荷の問題は発生していませんが、最悪の場合 (またはユーザーに関しては最高の場合;)) に備えようとしています。

この MySQL サーバーがインストールされているホストは、2GB の RAM を持つ Slicehost スライスです。

昨日、遅いクエリのログを有効にして、実際に何も遅くないことを確認しました。残念ながら、実際には多くの遅いクエリが見つかったようです。

IDは実際には主キーであるため、これは私にとって本当に奇妙です...テーブルはInnoDBです

私は説明しました:

これが起こるのには別の理由があるはずです。また、ログには実際に同様のスロー クエリ (主キーを使用するクエリ) が多数あります。

ここにMySQL設定を投稿するのは理にかなっていると思います:

リクエストのほとんどは「ベーシック」ですが、ものすごいスピードが必要です!

実際にMySQLが非常に遅くなる原因について何か考えはありますか?

[概要] さまざまな回答を要約すると、次のようになります。

  • "LIMIT" を削除し、WHERE id = "X" を WHERE id = X に変更します
  • 多くのリソースを消費するスクリプト (バックアップなど) が時々実行されないことを確認してください。
  • 「ホスト」が実際の原因ではないことを確認してください。
0 投票する
3 に答える
1583 参照

mysql - MyISAM テーブルが破損する

「テーブルが壊れているとマークされているため、修復する必要があります」などのエラーが表示されることがあります。その DB (テーブル) は MyISAM を使用しています。最近、それが続いています。原因は何ですか?最近、私はバッチ挿入を実行しています

INSERT INTO table (..., ..., ...) VALUES (...), (...), (...) ...

そしてハングしただけです。または完了するのに非常に時間がかかりました。翌日、テーブルを確認すると、再び破損しているとマークされていました。mysqlcheck -r を使用しようとすると、その「破損した」テーブルに到達すると、すべてのテーブルが正常であると表示され、再びハングしました...

だから、これを防ぐために私は何ができるでしょうか。そして、何が原因である可能性があります。DB はサードパーティでホストされています。これをデバッグするにはどうすればよいですか?

InnoDB は、使用するより信頼性の高いエンジンですか? MyISAM の方が速いと聞きましたが、InnoDB も高速であると言う人もいますが、最適化にはもう少し時間がかかります。InnoDB の方が信頼性は高いが、最適化を行っても全体的に少し遅いと結論付けることができますか?

0 投票する
1 に答える
429 参照

mysql - 2 つの Innob テーブルに外部キーを追加して、相互に自動更新するにはどうすればよいですか?

同様のデータを持つ2つのテーブルusersとlead_contactsがあります。誰かが製品を購入すると、ユーザーになります。以下の 2 つの create ステートメントをどのように変更すればよいでしょうか。

  • ユーザーの作成時に、leads テーブルが first_name、last_name、company、および email を含む新しいエントリを受け取ること。
  • リード テーブル情報が変更されると、users テーブルの first_name、last_name、company、および email が自動的に更新されます。

    CREATE TABLE lead_contacts(
    contact_idint(11) NOT NULL auto_increment,
    user_idint(11) unsigned NOT NULL default '0',
    emailvarchar(100) NOT NULL default '',
    companyvarchar(50) NOT NULL default '',
    first_namevarchar(50) NOT NULL default '',
    last_namevarchar(50) NOT NULL デフォルト '',
    addressvarchar(100) NOT NULL デフォルト '',
    address_2varchar(100) NOT NULL デフォルト '',
    cityvarchar(50) NOT NULL デフォルト '',
    statevarchar(50) NOT NULL デフォルト'',
    countryvarchar(50) NOT NULL デフォルト '',
    postal_codevarchar(30) NOT NULL デフォルト '',
    phonevarchar(30) NOT NULL デフォルト '',
    faxvarchar(30) NOT NULL デフォルト '',
    ship_bill_sameenum('Y', ' N') NOT NULL デフォルト 'Y',
    notesテキスト NOT NULL,
    admin_notesテキスト NOT NULL,
    list_namevarchar(50) NOT NULL デフォルト '',
    lead_listint(11) unsigned NOT NULL デフォルト '0',
    is_master_listenum('N', 'Y') NOT NULL デフォルト 'N',
    active_workenum('Y', 'N') NOT NULL デフォルト 'Y',
    parentIDint(11) unsigned NOT NULL default '0',
    PRIMARY KEY ( contact_id),
    KEY user_id( user_id),
    KEY lead_list( lead_list),
    KEY is_master_list( is_master_list),
    KEY active_work( active_work),
    KEY parentID( parentID)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=1;

    CREATE TABLE users(
    userIDint(11) NOT NULL auto_increment,
    access_levelint(11) NOT NULL デフォルト '0',
    usernamevarchar(100) NOT NULL デフォルト '',
    passwordvarchar(100) NOT NULL デフォルト '',
    first_namevarchar(50) NOT NULL デフォルト ' ',
    last_namevarchar(50) NOT NULL デフォルト '',
    companyvarchar(100) NOT NULL デフォルト '',
    emailvarchar(100) NOT NULL デフォルト '',
    PRIMARY KEY ( userID),
    UNIQUE KEY username( username)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

0 投票する
1 に答える
45588 参照

mysql - MySQL のデフォルトの ON DELETE 動作は何ですか?

MySQL docsを解析しようとしています。それらはより明確になる可能性があります。彼らが言っているように見えるのは、SET NULL、NO ACTION、RESTRICT、CASCADE、SET DEFAULT の 5 つの可能性があるということです。

NO ACTION と RESTRICT は同じことを行います (FK を壊すような DB の変更を防ぎます)。これがデフォルトであるため、ON DELETE 句を省略すると、NO ACTION (または RESTRICT -- 同じこと) となります。

SET NULL は親行の削除を許可し、FK を NULL に設定します。

CASCADE は子行を削除します。

SET DEFAULT は絶対に使用しないでください。

これは多かれ少なかれ正しいですか?

0 投票する
4 に答える
139 参照

mysql - より大きなMySQLテーブルにさらに別のフィールドを追加することを避ける必要がありますか?

350,000行以上のMySQL-InnoDBテーブルがあり、id、otherId、shortTitleなどがいくつか含まれています。今、私はそれらの行のおそらく数百または数千のブール/ビットフィールドを必要としています。そのboolフィールドをテーブルに追加するだけでよいのでしょうか、それとも古いテーブルのIDを参照する新しいテーブルを作成するのが最善でしょうか。これにより、最初のテーブルにアクセスするすべての古い既存の関数でパフォーマンスの問題が発生するリスクがなくなります。

(補足情報:「SELECT * ...」を使用したことはありません。メインテーブルには多くの読み取りがあり、書き込みはめったにありません。)

0 投票する
1 に答える
235 参照

mysql - 逆ルックアップにInnoDBテーブルでMysql外部キーを使用することは可能ですか?

Mysql(InnoDB)のFKを逆ルックアップに使用できるかどうか疑問に思います。

理由-データベースからXMLのような構造を読み取りたい(「レイヤー」ごとに1つのテーブルを使用)が、これを動的に実行できるようにします。新しいテーブルを追加し、FK制約を設定することで、xml構造を更新できるようにしたいと思います。

明確にするために、id(parent_id)と他の2つの列(k1とk2)を持つテーブル"parent"があるとします。xmlは次のようになります(idを省略):

次に、parent_idと他の1つの列(ck1)を参照する外部キーを持つ子テーブルを追加します。同じクエリ(後で処理を行う)により、次のようになります。

これは可能ですか?「SELECT*FROM parent_table」に、ある種のパラメータを設定して、FKでポイントを戻す子行も返しますか?

どうもありがとう!/ビクター