データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

1
各テーブルではなく、統合クエリからMATCH()AGAINST()スコアを計算します
SELECTステートメントのセクション全体のスコアを取得しようとしています SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword') UNION SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword') UNION SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword') そのような場合、スコアはテーブルごとです+それらは関連性によって順序付けされていません しかし、私はこの方法を試しました、それは機能していますが、生産の価値はありません SELECT * FROM ( SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword') UNION …

2
保留中のトランザクションのあるMySQLテーブルの削除
MySQLで保留中のトランザクションがあるInnoDBテーブルまたはデータベースを(できればファイルシステムレベルで)削除する方法はありますか? どうした: MySQL 5.5.28を使用して実行LOAD DATA INFILE…し、巨大なデータセット(3億行)をInnoDBテーブルにインポートしました。set autocommit = 0;以前は使用していませんでした。残念ながら、mysqldインポートの途中で中止されました。 を再起動mysqlすると、トランザクションがロールバックされ、次のようなメッセージがシステムログに記録されます。 mysqld_safe [4433]:121212 16:58:52 InnoDB:1つのアクティブなトランザクションが完了するのを待機しています 問題は、ロールバックが25時間を超えて実行されている間 mysqld、ソケット接続を受け入れていないことです。 /var/lib/mysql/*このマシンには他にもいくつかのInnoDBデータベース/テーブルがあるため、削除して最初から始めることはできません。ただし、問題のあるテーブルは、別のデータベース内の唯一のテーブルです。後ですべてのデータを再インポートできるため、テーブル全体またはデータベース全体を削除しても問題ありません。

1
結合を使用すると、SQL Serverはどのように結果を並べ替えますか?
SQL Serverは、クエリ実行の結果セット内のレコードの順序をどのように把握しますか? 頭や尻尾を作ろうとしているのですが、頭をひっかいています。フィールドを変更すると、選択する順序も変更されます。以下のSQLをaで実行するとSELECT *、同じレコードが取得されますが、順序が大きく異なります。 SELECT TOP (900) AD.ATTACHMENTID, AD.NAME, AD.ISINLINE, AD.INSERTEDDATETIME, ATMT.ATTACHMENTBLOB, U.UFID FROM ATTACHMENTDETAIL AD WITH (NOLOCK) INNER JOIN MESSAGEATTACHMENT MA ON MA.ATTACHMENTID = AD.ATTACHMENTID INNER JOIN ATTACHMENT ATMT ON ATMT.ATTACHMENTID = AD.ATTACHMENTID INNER JOIN MESSAGE MSG ON MSG.ID = MA.MESSAGEID INNER JOIN MESSAGEDETAIL MD ON MD.MESSAGEID = MA.MESSAGEID …

3
レプリケーションが失敗しました。もう一度始める方法?
UbuntuでPostgres 9.1.6を実行していますが、マスターとスレーブの間でストリーミングレプリケーションをセットアップしています。データベースがクラッシュし、両方のボックスを再起動するまで、すべてがスムーズに実行されていました。 これで、レプリケーションが停止し、両方のボックスのログを確認すると、次のメッセージが表示されます。 CDT FATAL:要求されたWALセグメント0000000100000224000000FAはすでに削除されています それは何度も同じセグメントです。私のグーグルから、レプリケーションサーバーがマスターからこのセグメントを取得しようとしているように見えますが、それはもうありません。わかりましたが、これを回避する方法は?新しいバックアップを作成し、それをスレーブにrsyncする必要がありますか?スレーブを同期させる簡単な方法はありますか?

1
MySQLテーブルの作成がめちゃくちゃ遅い
MySQLデータベースの1つで単純なテーブルを作成すると、時間がかかります。 mysql> CREATE TABLE blah (id BIGINT UNSIGNED NOT NULL PRIMARY KEY); Query OK, 0 rows affected (16.58 sec) マシンはかなりアイドル状態です: 01:21:26 PM CPU %user %nice %system %iowait %steal %idle 01:21:27 PM all 0.50 0.00 0.21 0.00 0.00 99.29 これを調査する方法はありますか? 編集:DTestのアドバイスに従って、これは実行プロファイルです: mysql> SHOW PROFILE FOR QUERY 1; +----------------------+----------+ | Status | …

1
値がNULLのブール値に対してクエリを実行すると、予期しないシーケンススキャン
auto_review列のタイプがと呼ばれるデータベース列がありますboolean。ActiveRecord ORMを使用して作成された、そのフィールドのインデックスがあります。 CREATE INDEX index_table_on_auto_renew ON table USING btree (auto_renew); フィールドにブール値を照会すると、PGは期待どおりにインデックスを使用します。 EXPLAIN for: SELECT "table".* FROM "table" WHERE "table"."auto_renew" = 'f' QUERY PLAN ---------------------------------------------------------------------------------------------- Bitmap Heap Scan on table (cost=51.65..826.50 rows=28039 width=186) Filter: (NOT auto_renew) -> Bitmap Index Scan on index_domains_on_auto_renew (cost=0.00..44.64 rows=2185 width=0) Index Cond: (auto_renew = false) (4 …

3
SQL Server Management Studioを介して別のサーバーをマップする方法
コマンドを入力して別のサーバーをマップしようとしています EXEC xp_cmdshell 'NET USE H:\\568.256.8.358\backup_147 1234abc /USER:cranew /PERSISTENT:yes' これでエラーが発生しました: ネットワークパスが見つかりません しかし、別のサーバーを手動でマップすることができます。これを整理するのを手伝ってください。

3
SELECT ROW_NUMBER()は、生成された行番号でソートされた結果を返すことが保証されていますか?
たとえば、SQLクエリについて考えてみましょう。 SELECT A.[Name], ROW_NUMBER() OVER(ORDER BY A.[Name] ASC) FROM [FooTable] AS A ここでは、A。[Name]でソートされて返される結果を観察します。ROW_NUMBER関数で定義されたソート列を別の列に変更すると、結果はその列でソートされます。 行番号が行に割り当てられることを期待していましたが、同じ基準で行がソートされて戻ってくるとは思っていませんでした。これは単にクエリがどのように実行されているか(SQL Server 2008 R2の場合)の副作用ですか、それともこの動作は保証されていますか?(私はそのような保証への言及を見つけることができませんでした)。

3
これら2つのクエリは論理的に同等ですか?
これら2つのクエリは論理的に同等ですか? DECLARE @DateTime DATETIME = GETDATE() クエリ1 SELECT * FROM MyTable WHERE Datediff(DAY, LogInsertTime, @DateTime) > 7 クエリ2 SELECT * FROM MyTable WHERE LogInsertTime < @DateTime - 7 それらが論理的に同等でない場合、WHERE句がインデックスを効果的に使用できるように(つまり、関数のラッピングを排除する)ために、最初のクエリと論理的に同等のものを提供できますか?

3
異なる通貨での価格の効率的な比較
ユーザーが価格帯で商品を検索できるようにしたい。ユーザーは、製品で設定されている通貨に関係なく、任意の通貨(USD、EUR、GBP、JPYなど)を使用できる必要があります。したがって、製品価格は200USDであり、ユーザーが100EUR-200EURの価格の製品を検索した場合でも、ユーザーはそれを見つける可能性があります。それを速く効果的にするには? これが私が今までやってきたことです。私は保存price、currency codeおよびcalculated_priceデフォルトの通貨であるユーロ(EUR)での価格です。 CREATE TABLE "products" ( "id" serial, "price" numeric NOT NULL, "currency" char(3), "calculated_price" numeric NOT NULL, CONSTRAINT "products_id_pkey" PRIMARY KEY ("id") ); CREATE TABLE "currencies" ( "id" char(3) NOT NULL, "modified" timestamp NOT NULL, "is_default" boolean NOT NULL DEFAULT 'f', "value" numeric NOT NULL, -- ratio additional …
10 postgresql  money 

1
列の長さを変更(縮小)するとどうなりますか?
タイプNUMBER(精度とスケールなし)との2つの列があるとしVARCHAR(300)ます。私はそれらを変更したいので、これらの列は私のデータに対して大きすぎる方法であることを見たNUMBER(11)とVARCHAR(10)。したがって、次のSQLステートメントを実行すると、 ALTER TABLE FOO MODIFY(BAR NUMBER(10)); 空でない列でそれを行うことはできますか? もしそうなら、何よりも1つの値がある場合NUMBER(10)、オラクルはそれについて教えてくれますか? 以前に定義されている場合、列のデフォルト値は変更されないままですか? 列のNULL可能オプションは変更されませんか? その列の主キー、外部キー、一意キーは変更されませんか? その列を含む制約は変更されませんか? その列のインデックスは変更されませんか? 私の質問に答える公式文書はありますか?

2
1時間あたり数千回の挿入を処理するようにMySQL Innodbを構成するにはどうすればよいですか?
非常にトラフィックの多いWebサイトを使用しており、毎時間数千の新しいレコードが挿入される可能性があります。 この1つのエラーがサイトに障害をもたらしています。 PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: INSERT INTO {location_instance} (nid, vid, uid, genid, lid) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4); Array ( [:db_insert_placeholder_0] => 1059 [:db_insert_placeholder_1] => 1059 [:db_insert_placeholder_2] => 0 [:db_insert_placeholder_3] => cck:field_item_location:1059 [:db_insert_placeholder_4] => 1000 ) MySQLがこのタイプの負荷を処理できなかった場合、私は非常に驚きます。それで、私の質問は、データベースの問題ですか?これだけのトラフィックを処理できるようにMySQLを構成するにはどうすればよいですか? …

1
EXECUTE AS USERとEXECUTE AS LOGINの違いは何ですか?
最近、EXECUTE AS LOGINを使用して、特定のユーザーがデータベースの1つでテーブル関数を使用できるかどうかを確認しています。テストは彼ができることを示したが、彼は失敗を繰り返し報告した。 人はログイン「WEB」を使用してデータベースに接続し、ログイン「WEB」に関連付けられたデータベースに「WEB」というユーザーがいるため、次のスクリプトを試しました。 -- part 1 EXECUTE AS USER = 'WEB' GO SELECT USER_NAME() AS 'user_name' ,SUSER_NAME() AS 'suser_name' ,SUSER_SNAME() AS 'suser_sname' ,SYSTEM_USER AS 'system_user' GO REVERT GO そして -- part 2 EXECUTE AS LOGIN = 'WEB' GO SELECT USER_NAME() AS 'user_name' ,SUSER_NAME() AS 'suser_name' ,SUSER_SNAME() AS 'suser_sname' ,SYSTEM_USER …

7
MySQLインデックス作成VarChar
blogentriesデータベースのインデックスを作成してパフォーマンスを向上させようとしていますが、問題が見つかりました。 ここに構造があります: CREATE TABLE IF NOT EXISTS `blogentries` ( `id_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `title_id` varchar(100) COLLATE latin1_german2_ci NOT NULL, `entry_id` varchar(5000) COLLATE latin1_german2_ci NOT NULL, `date_id` int(11) NOT NULL, PRIMARY KEY (`id_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=271; 次のようなクエリは、インデックスを適切に使用します。 EXPLAIN SELECT id_id,title_id FROM blogentries ORDER …
10 mysql  varchar 

3
マージレプリケーションのアーティクル数のハード制限?
背景のビット。マージレプリケーションを使用するアプリを開発しました。現在、約212の記事を公開していますが、256の記事数の制限に収まっているようです。(サーバーではSQL Standard 2005、サブスクライバーレベルでは2005 Expressを使用します。) 私たちは新しいバージョンを開発中であり、新しいデータベースはゼロから構築されています。これには、SQL 2008 R2 Standardサーバー側とExpress 2008 R2の最小システム要件があり、クライアント側でも同様です。公開された記事と同じ256カウント制限。(はい、2012年もサポートしますが、制限は同じです) 問題は、新しいバージョンで400以上の記事を公開してテストに成功し、すべてが機能的にテストされるところです(パブの作成、スナップショットとサブスクライバーの作成、およびレプリケーション自体)。他の誰かが以前にカウント制限を超えたことがありますか?これはソフト推奨制限に過ぎませんか?パブリケーションの作成中、またはサブスクライバーの作成中に、エラーは発生していません。 この記事によると:http : //msdn.microsoft.com/en-us/library/ms143432%28v=sql.105%29 Microsoftからのコールバックを待っていますが、SQLのどのバージョンでも、これを以前に見たことがあるかどうか知りたいのですが。

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