タグ付けされた質問 「update」

UPDATEは、条件を満たすすべての行の指定された列の値を変更します。変更する列のみをSET句で指定する必要があります。明示的に変更されていない列は、以前の値を保持します。

1
Postgres UPDATE…LIMIT 1
サーバーステータス(「アクティブ」、「スタンバイ」など)などのサーバーのクラスターに関する詳細を含むPostgresデータベースがあります。アクティブなサーバーはいつでもスタンバイにフェールオーバーする必要があり、特にどのスタンバイが使用されているかは気にしません。 データベースクエリでスタンバイのステータス(JUST ONE)を変更し、使用するサーバーIPを返すようにします。選択は任意です。サーバーのステータスはクエリによって変化するため、どのスタンバイが選択されているかは関係ありません。 クエリを1つの更新のみに制限することはできますか? ここに私がこれまで持っているものがあります: UPDATE server_info SET status = 'active' WHERE status = 'standby' [[LIMIT 1???]] RETURNING server_ip; Postgresはこれを好まない。別に何ができますか?

4
あるテーブルを別のテーブルの値に基づいてその場で更新する方法は?
私は次のようにipsの名前の表を持っています: CREATE TABLE `ips` ( `id` int(10) unsigned NOT NULL DEFAULT '0', `begin_ip_num` int(11) unsigned DEFAULT NULL, `end_ip_num` int(11) unsigned DEFAULT NULL, `iso` varchar(3) DEFAULT NULL, `country` varchar(150) DEFAULT NULL ) ENGINE=InnoDB countryid国テーブルからこのテーブルに次のようなフィールドがあると仮定します。 CREATE TABLE `country` ( `countryid` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci …
40 mysql  update 

2
PostgreSQLでの一括更新パフォーマンスの最適化
Ubuntu 12.04でPG 9.1を使用します。 現在、データベースで次の形式の多数のUPDATEステートメントを実行するのに最大24時間かかります。 UPDATE table SET field1 = constant1, field2 = constant2, ... WHERE id = constid (IDで識別されるオブジェクトのフィールドを上書きしているだけです。)値は外部データソースから取得されます(テーブル内のDBにはまだありません)。 テーブルにはそれぞれ少数のインデックスがあり、外部キー制約はありません。最後までCOMMITは行われません。 pg_dumpデータベース全体をインポートするには2時間かかります。これは、合理的に対象とすべきベースラインのようです。 PostgreSQLのデータセットを何らかの方法で再インポートするカスタムプログラムを作成する以外に、バルクUPDATEパフォーマンスをインポートのパフォーマンスに近づけるためにできることはありますか?(これは、ログ構造化されたマージツリーがうまく処理できると信じている領域ですが、PostgreSQL内でできることはないかと考えています。) いくつかのアイデア: すべての非IDインデックスを削除し、その後再構築しますか? checkpoint_segmentsを増やしますが、これは実際に長期的なスループットの持続に役立ちますか? ここで述べたテクニックを使用しますか?(新しいデータをテーブルとしてロードし、新しいデータにIDが見つからない古いデータを「マージ」する) 基本的に試してみることがたくさんありますが、最も効果的なものが何か、他のことを見落としているかどうかはわかりません。今後数日間は実験に費やしますが、ここでも同様に質問すると思いました。 テーブルには同時ロードがありますが、読み取り専用です。

6
MySQL単一テーブルの1,000万行以上をできるだけ速く更新する方法は?
ほとんどのテーブルでMySQL 5.6とInnoDBストレージエンジンを使用します。InnoDBバッファープールのサイズは15 GBで、Innodb DB +インデックスは約10 GBです。サーバーには32GBのRAMがあり、Cent OS 7 x64を実行しています。 約1,000万件以上のレコードを含む1つの大きなテーブルがあります。 24時間ごとにリモートサーバーから更新されたダンプファイルを取得します。ファイルはcsv形式です。私はそのフォーマットを制御できません。ファイルは最大750 MBです。MyISAMテーブルに行ごとにデータを挿入しようとしましたが、35分かかりました。 ファイルから10-12のうち1行につき3つの値のみを取得し、データベースで更新する必要があります。 このようなことを達成する最良の方法は何ですか? これを毎日する必要があります。 現在、Flowは次のようになっています。 mysqli_begin_transaction ファイルを1行ずつ読み込む 各レコードを行ごとに更新します。 mysqli_commit 上記の操作を完了するには約30〜40分かかりますが、これを実行している間、他の更新が行われているため、 ロック待機タイムアウトを超過しました。トランザクションを再開してみてください アップデート1 を使用して新しいテーブルにデータを読み込みますLOAD DATA LOCAL INFILE。MyISAM 38.93 secでは、InnoDBでは7分5.21秒かかりました。それから私はやった: UPDATE table1 t1, table2 t2 SET t1.field1 = t2.field1, t1.field2 = t2.field2, t1.field3 = t2.field3 WHERE t1.field10 = t2.field10 Query OK, …

5
データが変更されないUPDATEパフォーマンス
UPDATE実際にデータを変更しないステートメントがある場合(データは既に更新された状態にあるため)。WHERE更新を防ぐために節にチェックを入れることでパフォーマンス上の利点はありますか? たとえば、次のUPDATE 1とUPDATE 2の実行速度に違いがあります。 CREATE TABLE MyTable (ID int PRIMARY KEY, Value int); INSERT INTO MyTable (ID, Value) VALUES (1, 1), (2, 2), (3, 3); -- UPDATE 1 UPDATE MyTable SET Value = 2 WHERE ID = 2 AND Value <> 2; SELECT @@ROWCOUNT; -- UPDATE 2 UPDATE MyTable SET …

4
同じ値で行を更新すると、実際に行が更新されますか?
パフォーマンス関連の質問があります。マイケルという名のユーザーがいるとしましょう。次のクエリを実行します。 UPDATE users SET first_name = 'Michael' WHERE users.id = 123 同じ値に更新されている場合でも、クエリは実際に更新を実行しますか?もしそうなら、どうすればそれを防ぐことができますか?

3
更新(ソフトウェアおよびハードウェア)からの重いI / Oのためにデータベースを最適化する方法
状況 は非常に頻繁に更新されるpostgresql 9.2データベースがあります。したがって、システムはI / Oにバインドされており、現在別のアップグレードを検討しています。改善を開始する場所についての指示が必要です。 過去3か月間の状況の様子を次の図に示します。 ご覧のとおり、更新操作はほとんどのディスク使用率を考慮しています。より詳細な3時間のウィンドウで状況がどのように見えるかの別の写真を次に示します。 ご覧のとおり、ピーク書き込み速度は約20MB / sです ソフトウェア サーバーは、ubuntu 12.04およびpostgresql 9.2を実行しています。更新のタイプは、通常、IDで識別される個々の行で小規模に更新されます。例UPDATE cars SET price=some_price, updated_at = some_time_stamp WHERE id = some_id。可能な限りインデックスを削除して最適化し、サーバー構成(Linuxカーネルとpostgres confの両方)もかなり最適化されています。 ハードウェア ハードウェアは、32GB ECC ram、RAID 10アレイの4x 600GB 15.000 rpm SASディスクを備えた専用サーバーで、BBUとIntel Xeon E3-1245 Quadcoreプロセッサーを搭載したLSI RAIDコントローラーによって制御されます。 ご質問 グラフに表示されるパフォーマンスは、この口径のシステム(読み取り/書き込み)にとって妥当ですか? したがって、ハードウェアのアップグレードに重点を置くか、ソフトウェアの詳細な調査(カーネルの調整、confs、クエリなど)を行う必要がありますか? ハードウェアのアップグレードを行う場合、ディスクの数はパフォーマンスにとって重要ですか? - - - - - - - - …

2
変更されていない列も含めて、すべての列を更新するオーバーヘッドはどれくらいですか[クローズ]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店しました。 行の更新に関して、多くのORMツールは、特定のエンティティに関連付けられているすべての列を設定するUPDATEステートメントを発行します。 利点は、UPDATEどのエンティティ属性を変更しても同じステートメントであるため、更新ステートメントを簡単にバッチ処理できることです。さらに、サーバー側とクライアント側のステートメントキャッシングも使用できます。 したがって、エンティティをロードし、単一のプロパティのみを設定した場合: Post post = entityManager.find(Post.class, 1L); post.setScore(12); すべての列が変更されます: UPDATE post SET score = 12, title = 'High-Performance Java Persistence' WHERE id = 1 ここで、titleプロパティにもインデックスがあると仮定すると、DBは値がとにかく変わっていないことに気付かないでしょうか? で、この記事で、マルクスWinandは言います: すべての列の更新は、前のセクションで既に確認した同じパターンを示しています。応答時間は、インデックスが追加されるたびに増加します。 データベースは関連するデータページをディスクからメモリにロードし、列の値を変更する必要があるかどうかを判断できるため、なぜこのオーバーヘッドがあるのだろうかと思います。 インデックスの場合でも、変更されていない列のインデックス値は変わらないが、UPDATEに含まれているため、何も再分散しません。 データベースがリーフ値が同じであることを認識するためだけに、冗長で変更されていない列に関連付けられたB +ツリーインデックスもナビゲートする必要があるのでしょうか? もちろん、いくつかのORMツールでは、変更されたプロパティのみを更新できます。 UPDATE post SET score = 12, WHERE id = 1 しかし、このタイプのUPDATEは、さまざまな行のさまざまなプロパティが変更されたときに、バッチ更新またはステートメントキャッシュの恩恵を常に受け​​られるとは限りません。

3
更新列がインデックスにない更新ステートメントに対するインデックスの影響
私はインデックスが遅くなると人々が言うのを常に見ますupdate、deleteそしてinsert。これは、まるで絶対的なものであるかのように、ブランケットステートメントとして使用されます。 データベースを調整してパフォーマンスを向上させている間、私はこの規則に論理的に矛盾していると思われるこのような状況に出くわします。 SQL Serverでは、他のほとんどのDBMSを使用すると考えられますが、インデックスは指定した特定の列に基づいて作成されます。挿入と削除は常に行全体に影響を与えるため、インデックスに影響を与えることはありませんが、更新はもう少しユニークに見えます。特定の列にのみ影響します。 インデックスに含まれていない列があり、それらを更新する場合、そのテーブル内の他の列にインデックスがあるために、それらは遅くなりますか? たとえば、私のUserテーブルには、1つまたは2つのインデックス、Identity / Auto Incrementカラムであるプライマリキー、および場合によっては外部キーカラム上の別のインデックスがあります。 電話番号や住所など、インデックスのない列を直接更新すると、どちらの状況でもこのテーブルのインデックスが他の列にあるため、この更新は遅くなりますか?更新している列はインデックスにないため、論理的には、インデックスを更新しないでください。どちらかと言えば、WHERE句でインデックスを使用すると、速度が向上すると思います。

3
サブクエリを使用した大きなテーブルでの更新が遅い
でSourceTable> 15MMレコードとなるBad_Phrase> 3Kの記録を持つ、次のクエリは、SQL Server 2005のSP4上で実行するために、ほぼ10時間かかります。 UPDATE [SourceTable] SET Bad_Count= ( SELECT COUNT(*) FROM Bad_Phrase WHERE [SourceTable].Name like '%'+Bad_Phrase.PHRASE+'%' ) 英語では、このクエリは、フィールドのサブているBad_Phraseに記載されている明確なフレーズの数カウントしているName中でSourceTable、その後のフィールドにその結果を置くことをBad_Count。 このクエリを非常に高速に実行する方法についての提案をお願いします。

3
SQL Server:現在のセッションでのみ更新のトリガーを無効にする方法は?
SQL Server 2008 R2に取り組んでいます。 tiu_benefitという名前のAFTER INSERT、UPDATEトリガーを持つテーブルの利点があります。 このテーブルのUPDATEステートメントを記述して1行を更新したいのですが、トリガーを起動したくありません。UPDATEの前にトリガーを無効にしてから、UPDATEの後にトリガーを有効にできることを知っています。 DISABLE TRIGGER tiu_benefit ON benefit; GO UPDATE benefit SET editor = 'srh' where benefit_id = 9876 GO ENABLE TRIGGER tiu_benefit ON benefit; GO ただし、この無効化および有効化のトリガーは、現在ログインしているすべてのユーザーに影響します。そのため、トリガーによってスクリプトが無効になっている間に別のユーザーがUPDATE / INSERTを実行する可能性がありますが、これは適切ではありません。そのため、現在のセッションのトリガーのみを無効および有効にします。出来ますか?はいの場合、その方法を教えてください。 ありがとう

2
PostgreSQLの再帰的な子孫の深さ
祖先の子孫の深さを計算する必要があります。レコードにがある場合、レコードはobject_id = parent_id = ancestor_idルートノード(祖先)と見なされます。WITH RECURSIVEPostgreSQL 9.4でクエリを実行しようとしています。 データや列を制御しません。データおよびテーブルスキーマは外部ソースから取得されます。テーブルは継続的に成長しています。現在、1日あたり約3万件の記録があります。ツリー内のノードは欠落している可能性があり、ある時点で外部ソースからプルされます。彼らは通常引き込まれますcreated_at DESC順番にますが、データは非同期のバックグラウンドジョブでプルされます。 最初はこの問題に対するコードソリューションがありましたが、現在は500万行以上あり、完了するまでに約30分かかります。 テーブル定義とテストデータの例: CREATE TABLE objects ( id serial NOT NULL PRIMARY KEY, customer_id integer NOT NULL, object_id integer NOT NULL, parent_id integer, ancestor_id integer, generation integer NOT NULL DEFAULT 0 ); INSERT INTO objects(id, customer_id , object_id, parent_id, ancestor_id, generation) VALUES …

1
一意のインデックスの更新と統計行の変更カウンター
次の表、一意のクラスター化インデックス、および統計情報が与えられます。 CREATE TABLE dbo.Banana ( pk integer NOT NULL, c1 char(1) NOT NULL, c2 char(1) NOT NULL ); CREATE UNIQUE CLUSTERED INDEX pk ON dbo.Banana (pk); CREATE STATISTICS c1 ON dbo.Banana (c1); CREATE STATISTICS c2 ON dbo.Banana (c2); INSERT dbo.Banana (pk, c1, c2) VALUES (1, 'A', 'W'), (2, 'B', 'X'), …

2
重複キーでは何もしません
PtokaX APIでLuaSQLを使用して、次の表に挿入しています。 CREATE TABLE `requests` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `ctg` VARCHAR(15) NOT NULL, `msg` VARCHAR(250) NOT NULL, `nick` VARCHAR(32) NOT NULL, `filled` ENUM('Y','N') NOT NULL DEFAULT 'N', `dated` DATETIME NOT NULL, `filldate` DATETIME NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `nick_msg` (`nick`, `msg`), UNIQUE INDEX `ctg_msg` …

1
一意でないインデックスに重複したキー行を挿入できませんか?
8週間エラーがなかった後、過去数日間でこの奇妙なエラーに3回遭遇しましたが、困惑しています。 これはエラーメッセージです。 Executing the query "EXEC dbo.MergeTransactions" failed with the following error: "Cannot insert duplicate key row in object 'sales.Transactions' with unique index 'NCI_Transactions_ClientID_TransactionDate'. The duplicate key value is (1001, 2018-12-14 19:16:29.00, 304050920).". インデックスは一意ではありません。気付いた場合、エラーメッセージ内の重複キー値はインデックスと一致していません。奇妙なことは、プロシージャを再実行すると成功することです。 これは私の問題がある最新のリンクですが、解決策が見つかりません。 https://www.sqlservercentral.com/forums/topic/error-cannot-insert-duplicate-key-row-in-a-non-unique-index 私のシナリオに関するいくつかのこと: procはTransactionID(主キーの一部)を更新しています-これがエラーの原因であると思いますが、理由はわかりませんか?そのロジックを削除します。 テーブルで変更追跡が有効になっています コミットされていないトランザクションの読み取りを行う 各テーブルには45のフィールドがあり、主にインデックスで使用されるものをリストしました。update文のTransactionID(クラスター化キー)を(不必要に)更新しています。奇妙なことに、先週まで何ヶ月も問題がなかった。そして、それはSSISを介して散発的にのみ発生します。 テーブル USE [DB] GO /****** Object: Table [sales].[Transactions] Script …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.