問題タブ [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.
sql - SQL の代替を設計していますか?
私は独自の SQL に相当するもの (DDL+DML) を設計および実装することを考えています...
- 純粋なリレーショナル代数言語、および
- 洗練された Lisp/Scheme ライクな構文を持つ
MySQL などの RDBMS を想定すると、言語設計作業をどこから開始する必要があるでしょうか? InnoDB などのストレージ エンジン層の上に?
すべての RDBMS 機能が一般的にストレージ エンジンの上にあることを知りませんか? 私の現在の直感的な理解では、RDBMS (MySQL など) を作成するために必要な作業の大部分は、ストレージ エンジン内 (具体的には InnoDB) で既に行われており、必要なのはラッパー言語を作成することだけです。それ。しかし、それが本当なら、そもそもなぜ MySQL が存在するのだろうということも知っています!
mysql - あいまいな`id`フィールド
次の2つのテーブルがあります。
次のクエリを実行していますid
が、あいまいなエラーが表示されます。
ご覧のとおり、私はid
列を選択していません。system.id
選択するフィールドのリスト内に配置すると、このエラーは発生しなくなります。残念ながら、このデータの処理方法を返すことはできませんid
。ユーザーに表示したくないのです。
また、追加GROUP BY system.systemName
してもエラーは発生しなくなりましたが、これは最適な解決策ではないようです。
注:LEFT JOIN
すべてのシステムが組織に割り当てられるわけではないため、これは意図的なものです。
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 が連続していない値を使用する場合に問題があると思います。
理由はありますか?
ありがとう
mysql - MySQLクエリはランダムに「永久に」かかります
MySQL を使用して情報を保存する XMPP アプリケーションがあります。これまでのところ、特定の負荷の問題は発生していませんが、最悪の場合 (またはユーザーに関しては最高の場合;)) に備えようとしています。
この MySQL サーバーがインストールされているホストは、2GB の RAM を持つ Slicehost スライスです。
昨日、遅いクエリのログを有効にして、実際に何も遅くないことを確認しました。残念ながら、実際には多くの遅いクエリが見つかったようです。
IDは実際には主キーであるため、これは私にとって本当に奇妙です...テーブルはInnoDBです
私は説明しました:
これが起こるのには別の理由があるはずです。また、ログには実際に同様のスロー クエリ (主キーを使用するクエリ) が多数あります。
ここにMySQL設定を投稿するのは理にかなっていると思います:
リクエストのほとんどは「ベーシック」ですが、ものすごいスピードが必要です!
実際にMySQLが非常に遅くなる原因について何か考えはありますか?
[概要] さまざまな回答を要約すると、次のようになります。
- "LIMIT" を削除し、WHERE id = "X" を WHERE id = X に変更します
- 多くのリソースを消費するスクリプト (バックアップなど) が時々実行されないことを確認してください。
- 「ホスト」が実際の原因ではないことを確認してください。
mysql - MyISAM テーブルが破損する
「テーブルが壊れているとマークされているため、修復する必要があります」などのエラーが表示されることがあります。その DB (テーブル) は MyISAM を使用しています。最近、それが続いています。原因は何ですか?最近、私はバッチ挿入を実行しています
INSERT INTO table (..., ..., ...) VALUES (...), (...), (...) ...
そしてハングしただけです。または完了するのに非常に時間がかかりました。翌日、テーブルを確認すると、再び破損しているとマークされていました。mysqlcheck -r を使用しようとすると、その「破損した」テーブルに到達すると、すべてのテーブルが正常であると表示され、再びハングしました...
だから、これを防ぐために私は何ができるでしょうか。そして、何が原因である可能性があります。DB はサードパーティでホストされています。これをデバッグするにはどうすればよいですか?
InnoDB は、使用するより信頼性の高いエンジンですか? MyISAM の方が速いと聞きましたが、InnoDB も高速であると言う人もいますが、最適化にはもう少し時間がかかります。InnoDB の方が信頼性は高いが、最適化を行っても全体的に少し遅いと結論付けることができますか?
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_id
int(11) NOT NULL auto_increment,
user_id
int(11) unsigned NOT NULL default '0',
email
varchar(100) NOT NULL default '',
company
varchar(50) NOT NULL default '',
first_name
varchar(50) NOT NULL default '',
last_name
varchar(50) NOT NULL デフォルト '',
address
varchar(100) NOT NULL デフォルト '',
address_2
varchar(100) NOT NULL デフォルト '',
city
varchar(50) NOT NULL デフォルト '',
state
varchar(50) NOT NULL デフォルト'',
country
varchar(50) NOT NULL デフォルト '',
postal_code
varchar(30) NOT NULL デフォルト '',
phone
varchar(30) NOT NULL デフォルト '',
fax
varchar(30) NOT NULL デフォルト '',
ship_bill_same
enum('Y', ' N') NOT NULL デフォルト 'Y',
notes
テキスト NOT NULL,
admin_notes
テキスト NOT NULL,
list_name
varchar(50) NOT NULL デフォルト '',
lead_list
int(11) unsigned NOT NULL デフォルト '0',
is_master_list
enum('N', 'Y') NOT NULL デフォルト 'N',
active_work
enum('Y', 'N') NOT NULL デフォルト 'Y',
parentID
int(11) unsigned NOT NULL default '0',
PRIMARY KEY (contact_id
),
KEYuser_id
(user_id
),
KEYlead_list
(lead_list
),
KEYis_master_list
(is_master_list
),
KEYactive_work
(active_work
),
KEYparentID
(parentID
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=1;CREATE TABLE
users
(
userID
int(11) NOT NULL auto_increment,
access_level
int(11) NOT NULL デフォルト '0',
username
varchar(100) NOT NULL デフォルト '',
password
varchar(100) NOT NULL デフォルト '',
first_name
varchar(50) NOT NULL デフォルト ' ',
last_name
varchar(50) NOT NULL デフォルト '',
company
varchar(100) NOT NULL デフォルト '',
email
varchar(100) NOT NULL デフォルト '',
PRIMARY KEY (userID
),
UNIQUE KEYusername
(username
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
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 は絶対に使用しないでください。
これは多かれ少なかれ正しいですか?
mysql - より大きなMySQLテーブルにさらに別のフィールドを追加することを避ける必要がありますか?
350,000行以上のMySQL-InnoDBテーブルがあり、id、otherId、shortTitleなどがいくつか含まれています。今、私はそれらの行のおそらく数百または数千のブール/ビットフィールドを必要としています。そのboolフィールドをテーブルに追加するだけでよいのでしょうか、それとも古いテーブルのIDを参照する新しいテーブルを作成するのが最善でしょうか。これにより、最初のテーブルにアクセスするすべての古い既存の関数でパフォーマンスの問題が発生するリスクがなくなります。
(補足情報:「SELECT * ...」を使用したことはありません。メインテーブルには多くの読み取りがあり、書き込みはめったにありません。)
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でポイントを戻す子行も返しますか?
どうもありがとう!/ビクター