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

MySQLのすべてのバージョン(Microsoft SQL Serverではありません)。質問に関連する場合は、mysql-5.7のようなバージョン固有のタグも追加してください。

2
インデックスではない列は、インデックスとともにディスク上でソートされていますか?
インデックスではないカラムは、MySQL、MyISAM、InnoDBで、インデックスと一緒にディスク上でソートされますか? 私が書き始めた誤った考え: それらは索引付けされていないので、おそらくそうではないと思います。それらがソートされた場合、それらはインデックスであることを意味します。 すべてのインデックス列が独自のコンテンツの順序で並べ替えられているため、これは正しくありませんが、対応するインデックスを持つすべての行(または一部の列のみ)の順序付けについて質問しています。 説明すると、これは、インデックスによって並べて並んでいる行の範囲をより速く選択するのに役立ちます。たとえば、select * where id >1000 and id<2000(MySQL構文に誤りがある可能性があり、よくわからない)場合、おそらく1000から2000までのセルが物理ディスク上に残っているため、id列自体をディスクからすばやく読み取ることができます。 。ただし、ID 1000から2000に対応する他の列の内容は、物理ディスク上の別の場所に書き込まれる場合があります。それらもソートされている場合、より速く読み取られます。おそらく、MySQLはそのような操作のパフォーマンスのために、物理ディスク上の列を自動的にソートします。 それらは他のタイプのデータベース(PostgreSQLなど)でソートされていますか? 12月27日:2つの回答から、クラスター化インデックス/主キーがある場合、単純な行自体が物理ディスク上でソートされていない可能性があります(私が思ったように)、クラスター化インデックスでさえもソートされていない、それがbツリーである場合、私はbツリーについて読み、そのノードが、私が理解しているように、ディスク上のランダムな場所に留まっていることを確認しました。

1
MySQL for Windowsを.zipからインストールし、ルートパスワードをリセットします
私は自分のPC(Windows 8.1 x64)にMySQLサーバーのみを置き、Workbenchなどをインストールしたくありませんでした。だから私.zipはdev.mysql.com/downloadsからアーカイブをダウンロードしました。x86_64バージョン5.7.9(MySQL Community Server(GPL))上のWin64のダウンロードです。 Windowsサービスとしてインストールしましたが、mysqlデータベースはなく、のみでしたinformation_schema。だから私はこれを実行しました: mysql_upgrade.exe --upgrade-system-tables そして、mysqlデータベースが作成されました。しかし、それと同時に、ルートユーザーに何かが起こりましたmysql。もうアクセスできなくなったからです。 そこで、突然現れたこのパスワードをリセットすることにしました(その前にパスワードを持っていなかったためです)。私は公式マニュアルに次の解決策を見つけました、私はこのようにサーバーを起動しました: mysqld.exe --skip-grant-tables --console 次に、mysqlパスワードなしで開きました: mysql.exe –u root そして、ルートパスワードをリセットしようとしました: SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘passhere'); しかし、私はこのエラーを受け取りました: エラー1131(42000):MySQLを匿名ユーザーとして使用しており、匿名ユーザーはパスワードを変更できません。 これは何ですか?どのように私は匿名ですか?すべてのコマンドはcmd.exeアドミニストレーターの下で実行されました。 この状況でrootパスワードをリセットするにはどうすればよいですか? 更新1:現在のユーザーを確認しようとしました: SELECT USER(), CURRENT_USER(); それは与える: +--------+----------------+ | USER() | CURRENT_USER() | +--------+----------------+ | root@ | @ | +--------+----------------+ のように始めたので、それは奇妙mysql.exe -u rootです。 次に、ユーザーテーブルを確認しました。 …

1
MySQLに地理的位置データを格納するための10進数またはポイントデータタイプ
MySQL(Innodb)の「tblAddress」テーブルに各住所の地理的位置を保存したいのですが、2つのオプションがあると思います。 1) 2 columns for Each Address: Latitude DECIMAL(10, 8), Longitude DECIMAL(11, 8) 2) One Column for Each Address: GeoLocation POINT 私のプログラムは、現在の場所(モバイルクライアント)から1キロメートルの半径に該当するすべての住所を検索する必要があります。 また、以下のコマンドは私には機能しません、これのために何が必要かわかりません。 CREATE SPATIAL INDEX GeoLocation ON tblAddress (GeoLocation); したがって、ここで計算と取得を高速化するためにデータを保存するための推奨アプローチは何ですか。お知らせ下さい。

2
MySQL SELECTステートメントのTIMESTAMPフィールドのWHERE条件の最適化
使用時間を追跡する分析システムのスキーマに取り組んでいます。特定の日付範囲の合計使用時間を確認する必要があります。 簡単な例を挙げると、このタイプのクエリは頻繁に実行されます。 select sum(diff_ms) from writetest_table where time_on > ("2015-07-13 15:11:56"); 通常、このクエリは、データが密集しているテーブルで約7秒かかります。約3,500万行、Amazon RDS(db.m3.xlarge)で実行されているMySQLのMyISAMがあります。 WHERE句を削除すると、クエリの所要時間がわずか4秒になり、2番目の句(time_off> XXX)を追加すると、さらに1.5秒追加され、クエリ時間が8.5秒になります。 私はこれらのタイプのクエリが一般的に行われることを知っているので、それらをより速く、理想的には5秒未満に最適化したいと思います。 私はtime_onにインデックスを追加することから始めましたが、WHERE "="クエリは大幅に高速化しましたが、 ">"クエリには影響がありませんでした。WHERE ">"または "<"クエリを高速化するインデックスを作成する方法はありますか? または、このタイプのクエリのパフォーマンスについて他に提案がある場合は、お知らせください。 注:「diff_ms」フィールドを非正規化ステップとして使用しています(time_off-time_onと同じです)。これにより、集約のパフォーマンスが約30%から40%向上します。 私はこのコマンドでインデックスを作成しています: ALTER TABLE writetest_table ADD INDEX time_on (time_on) USING BTREE; (「time_on>」を使用して)元のクエリで「explain」を実行すると、time_onは「possible_key」であり、select_typeは「SIMPLE」です。「追加」の列は「使用場所」を示し、「タイプ」は「すべて」です。インデックスが追加された後、テーブルは「time_on」が「MUL」キータイプであることを示しています。これは、同じ時間が2回存在する可能性があるため、正しいように見えます。 これがテーブルスキーマです: CREATE TABLE `writetest_table` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `sessionID` int(11) DEFAULT NULL, `time_on` …

2
列数の多い単一のテーブルと列数の少ない複数のテーブル
ソーシャルネットワークのウェブサイトに適したデータベース設計は何でしょうか?列が多く行が少ない単一のテーブル、または列は少ないが行が多い複数のテーブル? 例:ユーザーは自分の壁またはグループに更新を投稿できます。 私が考えることができる2つのデータベース設計は次のとおりです。 デザイン1 UserPosts id ユーザーID 役職 日付時刻 UserGroupPost: id groupId ユーザーID 役職 日付時刻 潜在的な問題:結合が必要になる可能性があり、(将来的には)クエリが遅くなる可能性があります。 デザイン2 投稿: id ユーザーID groupId 役職 datetime(ユーザーが壁に投稿した場合、groupidはnullになります) 潜在的な問題:大きなデータセットをループすると、(長い)時間がかかる場合があります。 データが増加した場合、どのようにしてパフォーマンスを向上させることができますか?他に(より良い)方法はありますか?

2
時間の重複に基づいて開始日と終了日を決定するクエリ
次のデータが与えられます: id | user_id | started | closed | dead ------------------------------------------------------------------------------------------- 7714 | 238846 | 2015-01-27 15:14:50 | 2015-02-02 14:14:13 | NULL 7882 | 238846 | 2015-01-28 13:25:58 | NULL | 2015-05-15 12:16:07 13190 | 259140 | 2015-03-17 10:11:44 | NULL | 2015-03-18 07:31:57 13192 | 259140 | 2015-03-17 10:12:17 …
8 mysql 

1
MySQLが数値列にNULLをロードする
MySQL 5.6.23、InnoDB コマンドを使用して文字区切りのテキストファイルからテーブルを読み込んでいます。この設定の文字であるLOAD DATA INFILEを含むすべてのフィールドで、テーブルにを配置します。一部の数値タイプにはこの動作がありますが、他の数値タイプには。私が使用しており、一部の列は適切に値を取得するため、固定行形式の問題ではありません。\NNULLNULL0FIELDS TERMINATED BYNULL これらは、テスト中に観察したタイプです。 INT挿入NULL秒 DECIMAL(x,0)挿入NULL秒 DECIMAL(x,y)挿入0.0秒 FLOAT挿入0秒 DOUBLE(x,y)挿入0.0秒 DOUBLE挿入0秒 問題の列はすべてで定義されDEFAULT NULLます。さまざまな関数がこれら0のをに変換できることを知っていNULLます。問題は、10進精度を処理できNULL、ロード時にs も挿入するデータ型があるかどうかです。 さらに、文字列、空の文字列、null値の違いに関する誤解に関する質問がたくさんあります。(例えば 実施例の 一例)、これは、問題ではないNULLのがあるとDECIMAL(X、3)のように定義された場合、私は不適切次いで、DECIMAL(X、0)として再定義し、同じ列に適切にロードされます。

2
基本設計、初回データベース設計に関するアドバイス
私はJava開発者になるためのコースを取っています。 コースにはデータベースの使用が含まれますが、残念ながら実際に設計することはありません。 ほとんどの場合、事前に作成されたデータベースを取得し、データを挿入、更新、読み取り、または削除するためのコードを実装する必要があります。 しかし、私の最終テストが来るとき、私はデータベースを含む何かを作ることになる可能性が高いので、良いデータベース設計は多くの違いを生むことに気付いたので、設計のこつを得るためにいくつかの小さいものを設計してみたいと思います使用するコードを記述します。 これらの種類の質問がここで許可されていて、広すぎないことを願っています。 これは私が何かのように簡単なために作られた小さなデザインであるclubsとmembersしてaddressesとphonenumbers。 複数のクラブがあります。 各クラブには複数のメンバーがいます(自明) 会員は複数のクラブに所属することはできません メンバーは複数の電話番号とメールアドレスを持つことができます メンバーは1つのアドレスしか持てません アドレスは異なるメンバー(カップルまたは兄弟)に属することができます 私の最大の混乱: Club所有者を説明する列を追加したい場合、誰がメンバーにもなりますが、同じメンバーを2回リストしない場合の最善の方法は何ですか? すべてのテーブルをIDの自動インクリメントに配置する必要がありますか、それとも悪い考えですか?(メリット/デメリット?) [外部キー]タブで外部キーを追加すると、これらは自動的に正しいテーブルに対応しますか、それとも列に追加する必要がありますか?(写真2を参照) そして、すべての私はおそらくnoobiest質問...ドゥ私はの外部キー置くphonenumberとemailPERSON_IDにリンクし、それぞれのテーブル内のか、私は人のテーブルににphoneNumberやメール同上のを置く必要がありますか? (写真の言語が英語ではないことをお詫びします。これがそれほど問題にならないことを願っています)

1
mydumperの '' --use-savepoints "オプションはメタデータのロックをどのように減らしますか
MyDumper 0.6.1は新しいオプションを追加します--use-savepoints。マニュアルから、それは意味します: セーブポイントを使用してメタデータのロックの問題を軽減します。SUPER権限が必要です 分からない。「メタデータのロックの問題を軽減する」方法と、「SUPER特権」が必要な理由 私が思うに、メタデータは他のDDL変更テーブル構造を防ぐために不可欠です。

7
リモートMySQL接続が失敗する(10060)-「domainname.com(10060)上のMySQLサーバーに接続できません」
VB6でアプリケーションを開発し、アプリケーションのデータを保存するためにオンラインのMySQLデータベースサーバーを使用しています。 初めてデータベースサーバーに接続しようとしたときは成功しましたが、アプリケーションを閉じて再起動した後、次のようになります。 MySQLサーバーに接続できません(10060) " しばらくして(約30分)、データベースに再び正常に接続できます。 すべてのMySQLシステムおよびconnection_timeout、wait_timeoutなどのグローバル変数に最大値を指定しました。 MySQLユーザーにすべての権限を付与しました。 コンピュータのファイアウォールがオフになっています。 アプリケーションを閉じると、すべての接続が適切に閉じられます。 オンラインMySQLデータベースサービスを提供する技術者に尋ねたところ、次の3つの理由がわかりました。 接続しようとしているローカルマシンがサーバーでホワイトリストに登録されていません。 ユーザーの最大接続数を超えました。 MySQLサーバーはその時点でダウンしていました(ただし、サーバーはダウンしていないとのことです)。 最初の2つの理由を解決する方法、またはそれらが問題の原因であると判断する方法を教えてください。または、そこにリストされていない別の問題があるのでしょうか?

1
MySQLレプリケーション:マスターの後ろの超高音
本番データベース用にスレーブdbサーバーをセットアップしましたが、show slaveステータスを確認したところ、マスターの数秒後に非常に大きな数値が表示されました。 これは出力です: Slave_IO_State: Waiting for master to send event Master_Host: 1.2.3.4 Master_User: replicator Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000173 Read_Master_Log_Pos: 15909435 Relay_Log_File: mysqld-relay-bin.000079 Relay_Log_Pos: 91173356 Relay_Master_Log_File: mysql-bin.000093 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 91173210 Relay_Log_Space: 8179978166 Until_Condition: None Until_Log_File: …

1
2つのサーバーでのMySQLのパフォーマンスの大きな違い
MySQLサーバーをテストサーバーと本番サーバーの2つの異なるマシンにインストールしました。どちらもWindowsであり、ウェブアプリケーションで使用されます。 問題は、いくつかのクエリを実行すると、2つのマシン間でパフォーマンスが大幅に異なることです(本番サーバーの方が低速です)。両方のサーバーのMySQLバージョンは同じです。構成ファイルも同じです(唯一の違いは、データのパスと、運用サーバーがエラー以外のログを記録しないことです)。私が話しているパフォーマンスの違いは3桁または4桁大きくなっています(たとえば、テストサーバーでのクエリは0.2秒で実行されますが、運用サーバーでは84秒で実行されます)。 問題のクエリは、 "WHERE [...] IN [...]"を含む句を多用しています。これは、通常非常に遅く、JOINに置き換える必要があることを理解しています。ただし、使用しているMySQLのバージョンは5.6.19であり、これらのクエリは自動的に最適化されます。そのため、テストサーバーではクエリが高速に実行されます(変更できないプログラムの一部であるため、手動で最適化することはできません)とにかく)。 先ほど述べたように、MySQLのインストールと構成は同じであるため、問題がどこにあるのかはまったくわかりません。一方では、プログラムとDBが同じであるため、なんらかの構成上の問題である必要があると思いますが、一方で、構成が同一であるため、これは意味がありません。 サーバー上のデータ: テストサーバー: Intel Core 2 Quad Q9400 @ 2.66GHz 8GB RAM Windows Server 2008 R2スタンダード 本番サーバー: Intel Xeon E5530 @ 2.40GHz 5GB RAM Windows Server 2012 R2スタンダード 編集:重要なことを言うのを忘れていました。「問題の」クエリとは別に「WHERE ... IN」句を使用するクエリが実行されています。これらは両方のマシンで高速に実行され、MySQLによって正しく最適化されていることを示唆しています。他のクエリが最適化されていないときに最適化されているクエリがあるのは不思議です。これが実際の問題であるかどうかは不明です。 編集#2:両方のサーバーの構成ファイルは次のとおりです:http : //pastebin.ca/2834906 編集#3:遅いクエリの1つ のEXPLAINは次のとおりです。https://mariadb.org/ea/v36zj EXPLAINは、テストと製品の両方でまったく同じです。クエリ自体はこちらです:http : //pastebin.com/VXgBxXmtこれはオートフォーマッタでフォーマットされているため、あまり明確ではありません。ご覧のとおり、は非常に長く複雑です。これは手動で生成されたものではなく、いくつかの機能を備えた標準SQLの方言を使用するソフトウェアによってさらに自動的に生成されます。 また、詳細情報:本番サーバーのデータを減らし、使用されないDBの古いデータのほとんどを削除することで、一時的に問題にパッチを適用しました。もちろん古いデータも必要なので、これは解決策ではありません。将来的には問題になるでしょう。DBはそれほど大きくありません。完全なDBは1308MBで、現在生産中の縮小バージョンは332MBです。 更新:解決しましたか? 私は問題を解決したと思います。本番サーバーが実際に使用されているため、まだテストしていませんが、考えられる問題は、182Mに設定されたパラメーター "innodb_buffer_pool_size"でした。実際には、構成ファイルの行は次を示しています:innodb_buffer_pool_size …

1
BLACKHOLEテーブルからデータを回復することは可能ですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 5年前休業。 エンジンBLACKHOLEを使用してテーブルを作成しました。 基本的に、BLACKHOLEストレージエンジンは、データを受け入れますが、破棄して格納しない「ブラックホール」として機能します。検索は常に空の結果を返します。 innodbまたはmyisamとしてストレージエンジンを使用して、古いテーブルと同じ新しいテーブルを作成することでデータを取得できると聞きました。しかし、私もそれを試しましたが、結果を得ることができませんでした。誰かがこの問題を解決するために私を助けることができますか? mysql> CREATE TABLE test1(i INT, c CHAR(10)) ENGINE = BLACKHOLE; Query OK, 0 rows affected (0.08 sec) mysql> INSERT INTO test1 VALUES(1,'record one'),(2,'record two'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from test1; Empty …

3
MySQLの同じ名前の2つのテーブル
今日、一時テーブルを削除したときに、この奇妙な問題が発生しました。確認のために一時テーブルを削除し、テーブルを記述しました。しかし、テーブルは削除されませんでした。いくつか検索したところ、次のことがわかりました。 MySQLでは、永続テーブルと同じ名前の一時テーブルを作成できます。そのため、一時テーブルは削除され、永続テーブルは削除されませんでした。作業しているテーブルが本当に混乱しました。 MySQLバージョン:5.1.36-enterprise-gpl-pro-log これは私がテストしたものです: mysql> create table test(id int); Query OK, 0 rows affected (0.00 sec) mysql> desc test; | Field | Type | Null | Key | Default | Extra | -------------------------------------------------- id int(11) YES NULL mysql> create temporary table test(id int); Query OK, 0 rows affected (0.00 sec) …
8 mysql  table 


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