プログラマのインタビューの準備書類:18古典的なMySQLのインタビュー話題の解像度、呉服シェア

プログラマのインタビューの準備書類:18古典的なMySQLのインタビュー話題の解像度、呉服シェア

1.データベース3つのパラダイムとは何ですか?

  1. 最初のパラダイム(1NF):フィールドがアトミックでは、分割することができません。(リレーショナルデータベースシステムは、単一のプロパティであるすべての第1正規形のデータベーステーブルのフィールドにある分割できません)
  2. 第2正規形(2NF)は、第2正規形(2NF)上の第1正規形(1NF)に基づいて確立されている第1正規形(1NF)を満たさなければなりません。各インスタンスは、データベーステーブルを必要とするまたは行のみサブ領域でなければなりません。典型的には、一意の各インスタンスストレージを識別するために、テーブルに列を追加する必要があります。このユニークなプロパティは、主キー列または主キーと呼ばれています。
  3. 第3正規形(3NF)は、第二のパラダイム(2NF)を満たさなければなりません。簡潔に述べると、第三のパラダイム(3NF)は、既に他のテーブルに含まれていない非主キー情報を含むデータベーステーブルを必要とします。>これは、次の特性を有する第三のパラダイム:1 >>各列2行ごとに一つだけの値を区別することが可能です。>> 3.各テーブルには、すでに他のテーブルに含まれるいかなる非プライマリキー情報が含まれていません。

2.データベースの最適化を持ってどのような経験?

  1. パフォーマンスの声明よりも一般的に高い使用のPreparedStatement、:構文チェック、意味解析、コンパイル、キャッシュ:実行するサーバーへのSQLは、以下のステップを伴います。
  2. プログラムが外部キーを削除するデータベースの設計では、データの整合性を確保することである場合には、挿入に影響を与えるとパフォーマンスを削除します外部キー制約があります。
  3. 次に、適切な冗長性テーブルは、例えば、4 UNION ALL UNIONより返信と最後の応答時間のポストの数より速く、それゆえ、それは2つの合成結果セットが重複したデータが含まれていないと発注の時間を必要としない場合ことを確認した許可、その後、UNIONALLを使用しています。>> UNIONとUNIONすべてのキーワードを1つに両者を組み合わせた結果であり、それから利用及び効率の両方が異なっています。> 1は、結果の処理を繰り返す:UNIONは、テーブルが重複したリンクレコードを除外します行った後、連合のすべての重複レコードを削除しません。> 2ソート処理:連合はフィールドの順にソートされます。UNION ALLは、単純に復帰した後、二つの結果をマージします。

3.簡単にどのような一般的に使用されるインデックスを記述してください?

  1. 通常のインデックス:つまり、データベーステーブルのインデックスを作成します
  2. 唯一のインデックス:一般的な指標と同様に、異なっている:MySQLデータベースの索引列の値は一意であるが、自由な値を許可する必要があります
  3. 主キーインデックス:それはNULLを許可しない、特別な一意のインデックスです。通常、同時にテーブルの時に建設主キーのインデックスを作成します
  4. 複合インデックス:MySQLの抽出の効率を促進するために、我々は複合インデックスの設立を検討すべきです。データベーステーブルの複数のフィールドは、複合インデックスと一緒に来ます。

4.何がインデックスの作業メカニズムであり、mysqlデータベースにありますか?

  • データベースのインデックス作成、迅速なクエリを支援するためのデータベース管理システム、データ構造の一種、データベーステーブルの更新データ。一般的に、インデックスBツリーとB +ツリーバリアントを達成するために使用されます

運転指令の基礎を5.MySQL:

  1. MySQLが動作している場合:Debianの上でコマンドサービスmysqlstatusを実行して、RedHatの上でコマンドサービスのmysqld statusを実行します
  2. MySQLサービスの開始と停止:サービスを開くために開始してmysqldコマンドサービスを実行し、実行サービスのmysqld stopコマンドサービスを停止します
  3. シェルログインのMySQL:コマンドのmysql -uルート-pを実行します
  4. すべてのデータベースをリスト:コマンドshowデータベースを実行します。
  5. データベースに切り替え、それに取り組む:コマンドデータベースの使用実行名を、名前のデータベース入力のデータベース名を
  6. データベース内のすべてのテーブル一覧表示されます:ショーのテーブルを。
  7. テーブル内のすべてのフィールドオブジェクトの名前とタイプを取得します。TABLE_NAMEを記述する。

6.mysql複製原理とプロセス。

MySQLの組み込みのレプリケーションは、大きな、高性能なアプリケーションを構築するための基礎です。複数のデータまでのMySQL機構配信システムは、この分布は、再び別のホストのMySQL(スレーブ)1つのホストのデータをコピーすることによって達成され、再実行します。一つ以上の他のサーバがサーバからとして機能している間*複製中のサーバは、プライマリサーバとして機能します。

マスタインデックスサーバはバイナリログファイルが更新される書き込み、およびログ・サイクルを追跡するためのファイルを維持します。これらのログ・レコードが更新するように、サーバから送信することができます。マスターサーバーからの接続は、それが最後に成功した更新の位置を通知すると、マスターサーバーがログに読み込みます。

それ以来、サーバが起こってから更新を受信し、メインサーバをブロックし、新規更新の通知を待ちます。次の

1.プライマリサーバはバイナリログファイルへの記録を更新します。

2.サーバーからは、彼らの中にバイナリリレーログ(再生ログ)にマスターコピーをログに記録します。サーバーからの3時間リレーREDOログは、更新には、独自のデータベースに適用されます。

7.mysqlサポートコピータイプ?

  1. ステートメントベースのレプリケーション:プライマリサーバ上で実行されるSQL文は、サーバから同じ文を実行します。デフォルトのMySQLステートメントベースのレプリケーション、より効率的。クローンは見つからなかったら、コピーが自動的に行に基づいて選択されます。
  2. 行ベースのレプリケーション:過去のコンテンツの変更をコピーするのではなく、初めMySQL5.0のサポートから再びサーバからのコマンドを実行します。
  3. 複製の混合型:それは書類に基づいて発見された場合、レプリケーションステートメントをベースデフォルト値を正確に複製することはできませんが、行ベースのレプリケーションを使用します。

InnoDBのでMyISAMテーブルを区別8.mysql?

  1. トランザクションサポート>  のMyISAM:それはInnoDBのタイプよりも速く実行し、パフォーマンス、クエリがアトミックであるたびに、強調しますが、トランザクションのサポートを提供していません。 InnoDBテーブル:ようにトランザクション、外部キーをサポートし、かつ、総務を備え、高度なデータベースを提供します。トランザクション(コミット)、トランザクションセーフロールバック(ロールバック)と(トランザクションセーフ(ACID準拠)のクラッシュ修復能力(クラッシュ復旧機能)との ) テーブルを入力します。
  2. InnoDBは、行レベルのロック、および支持MyISAMテーブルレベルのロックをサポートする。作動表に>>のMyISAMユーザ選択、更新、削除、文を挿入し、自動的にテーブルにロックされロックされている場合、同時挿入テーブルの場合には後満たしますあなたは、テーブルの最後に新しいデータを挿入することができます。
  3. InnoDBはMVCCをサポートしていますが、MyISAMテーブルはサポートしていません。
  4. サポートInnoDBの外部キー、およびMyISAMテーブルはサポートしていません。
  5. 表の主キー>  のMyISAM:主キー索引の存在はアドレス行に格納されている任意のインデックステーブルを許可していません。 InnoDBは:いいえ非ヌル主キーまたは一意のインデックス場合、自動的に6バイトのメインキー(ユーザに見えない)、メインインデックスのデータの一部を生成するには、インデックスは、メインインデックスの追加の値が格納されます。
  6. InnoDBは、フルテキストインデックス、およびMyISAMのサポートをサポートしていません。
  7. 移植性は、バックアップと復元>  MyISAMテーブル:データはファイルとして保存され、それがプラットフォーム間でのデータ転送のために非常に便利になります。これは、バックアップとリカバリの時にテーブルごとに個別に操作することができます。 InnoDBは:比較的痛みGの数十のデータファイル、バックアップビンログ、または使用mysqldumpを、データの量をコピーすることができますフリープログラム
  8. ストレージ構造>  のMyISAM:ディスク上に3つのファイルに各MyISAMストレージ。拡張を開始するテーブルの最初のファイル名の名前は、ファイルの種類を示します。.FRMファイルには、テーブルを記憶します。.MYD(MYDATA)という名前の拡張データファイル。拡張インデックスファイルには.MYI(MYIndex)です。 InnoDBは:すべてのテーブルは、典型的には、2ギガバイト、同じデータファイルに格納されている(また、複数のファイル、または別のファイル・テーブル・スペースであってもよい)、テーブルのサイズのみInnoDBのオペレーティング・システム・ファイル・サイズに制限されています。

9.mysqlとvarcharの(50)50人の代表でVARCHARとチャーとの間の差を意味?

  1. VARCHAR差とチャー:charが固定長のタイプであり、VARCHARは可変長タイプです。
  2. 50でVARCHAR(50)意味:ストレージの50バイトまで
  3. 20(20)INTとを意味することである:Mはmaximumlegal表示幅が255であり、整数タイプのmaximumdisplay幅(ディスプレイの最大幅)のint(M)を示します..

InnoDBはトランザクション分離レベルで10.MySQLは4名だけでなく、プログレッシブ間の違いによってサポートされていますか?

  1. この分離レベルではコミットされていない(非コミット読み取りの内容を)>>読んで、すべてのトランザクションは、他のコミットされていないトランザクションの結果を見ることができます。その性能は他のレベルよりもはるかに良いではありませんので、この分離レベルはほとんど、実際には使用されません。非コミット読み取りデータは、また、ダーティリード(ダーティ・リード)と呼ばれます。
  2. コミット読み取り(提出を読む)>>これは、ほとんどのデータベース・システムのデフォルトの分離レベル(MySQLのではなく、デフォルト)です。それは、分離の簡単な定義を満たす:トランザクションが唯一の変化は、企業が行う提出されている見ることができます。新しいので、コミットがあるかもしれません、その間プロセスの例では、同じトランザクションの他のインスタンスが同じで異なる結果を返すことが選択しているため、この分離レベルはまた、非反復可能読み取り(反復不能読み取り)、いわゆるサポートしています。
  3. 複数のインスタンス(再読み込みすることができます)>>これはデフォルトのMySQLのトランザクション分離レベルで、それは同じトランザクション反復可能読み取り同時は、一度にデータを読み込むことを保証し、あなたは、同じデータ行が表示されます。マジック読書(PhantomRead):しかし、理論的には、それは別の厄介な問題につながります。簡単に言えば、ファントム読み取りは、ユーザがデータ行の範囲を再読み込みする場合、データ行の範囲を読み込み、別のトランザクションおよび範囲内に新しい行を挿入するとき、あなたは「新しい発見をすることを意味しますファントム「行。マルチバージョン同時実行制御(MVCC、マルチバージョン並行処理制御ギャップロック)機構を介してのInnoDBとファルコンストレージエンジンは、問題を解決します。注意:実際には、マルチバージョンのみ非反復可能読み取りの問題の問題、プラスクリアランスロック(つまり、ここでは、同時実行制御と呼ばれている)我々はファントムの問題を解決することができる前にお読みください。
  4. 直列化(直列化可能)>>これは最高の分離レベル、ファントムが読ん問題を解決するために、互いに競合することは不可能にすることを強制することにより、トランザクションの順序です。要するに、それは、読み取られたデータの各行に対して共有ロックを追加することです。このレベルでは、それがタイムアウトとロック競合の多くにつながる可能性があります。

目の休憩をしましょう、そして、それを続けてください!

11.テーブルが大規模なフィールドX持つ(例:テキストタイプ)、およびXフィールドがメインとして読むために頻繁に更新されることはありません、このフィールドはどのようなメリットサブテーブルに分割されましたか?

フィールド場合、大きなフィールドがある(テキスト、BLOB)タイプ、およびこれらのフィールドへのアクセスはあまりありませんが、今回は一緒に欠点となります。MYSQLストレージ行に格納されたデータベースレコードが、より小さなデータ・ブロック・サイズが固定されている(16K)、各レコードに、同じブロックに格納された複数のレコード。この時点では、大規模なフィールドを削除する必要があるので、クエリフィールドに対処する際に、最も小さな、効率を改善することができるようになります。あなたが大規模なフィールドを照会する必要がある場合は、クエリに関連付けられているこの時間は避けられないが、それはそれだけの価値があります。オープン分割した後、テーブルのUPDATEの複数の必要なフィールドをUPDAE

InnoDBの行ロック12.MySQLエンジンのどの(または実現)に添加することによって行われますか?

InnoDBの行ロックを達成するために、データ・ブロック内の対応するデータ線によってロックされているMySQLとオラクル、異なるロック、上のインデックス項目にインデックスすることによって達成されます。この特性手段を達成するためのInnoDB行ロック:インデックスのみの条件を介してデータを取得するために、唯一のInnoDBの行レベルのロック、そうでない場合は、InnoDBのテーブルロックを使用します!

13.MySQLグローバルパラメータの制御メモリの割り当て、何?

  1. Keybuffersize:> keybuffersize 指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Keyreadrequests 和 Keyreads,可以知道 keybuffersize 设置是否合理。比例 keyreads /keyreadrequests 应该尽可能的低,至少是1:100,1:1000 更好(上述状态值可以使用 SHOW STATUS LIKE‘keyread%'获得)。> keybuffersize 只对 MyISAM 表起作用。即使你不使用MyISAM 表,但是内部的临时磁盘表是 MyISAM 表,也要使用该值。可以使用检查状态值 createdtmpdisktables 得知详情。对于 1G 内存的机器,如果不使用 MyISAM表,推荐值是 16M(8-64M) > keybuffersize 设置注意事项 >>>1. 单个keybuffer 的大小不能超过 4G,如果设置超过 4G,就有可能遇到下面 3 个bug: >>>>> http://bugs.mysql.com/bug.php?id=29446 <br/> >>>>> http://bugs.mysql.com/bug.php?id=29419 <br/> >>>>> http://bugs.mysql.com/bug.php?id=5731 <br/> >>>2. 建议 keybuffer 设置为物理内存的 1/4(针对 MyISAM 引 擎),甚至是物理内存的 30%~40%,如果keybuffersize 设置太大,系统就会频繁的换页,降低系统性能。因为 MySQL 使用操作系统的缓存来缓存数据,所以我们得为系统留够足够的内存;在很多情况下数据要比索引大得多。>>>3. 如果机器性能优越,可以设置多个keybuffer,分别让不同的key*buffer 来缓存专门的索引
  2. innodbbufferpool_size > 表示缓冲池字节大小,InnoDB 缓存表和索引数据的内存区域。mysql 默认的值是 128M。最大值与你的CPU 体系结构有关,在 32 位操作系统,最大值是 4294967295(2^32-1) ,在 64 位操作系统,最大值为18446744073709551615 (2^64-1)。> 在 32 位操作系统中,CPU 和操作系统实用的最大大小低于设置的最大值。如果设定的缓冲池的大小大于 1G,设置innodbbufferpoolinstances 的值大于 1. > 数据读写在内存中非常快, innodbbufferpoolsize 减少了对磁盘的读写。当数据提交或满足检查点条件后才一次性将内存数据刷新到磁盘中。然而内存还有操作系统或数据库其他进程使用, 一般设置bufferpool 大小为总内存的 3/4 至 4/5。若设置不当, 内存使用可能浪费或者使用过多。对于繁忙的服务器, buffer pool 将划分为多个实例以提高系统并发性, 减少线程间读写缓存的争用。buffer pool 的大小首先受 innodbbuffer*pool_instances 影响,当然影响较小。
  3. querycachesize > 当 mysql 接收到一条 select 类型的 query时,mysql 会对这条query 进行 hash 计算而得到一个 hash 值,然后通过该 hash 值到 query cache 中去匹配,如果没有匹配中,则将这个hash 值存放在一个 hash 链表中,同时将 query 的结果集存放进cache 中,存放 hash 值的链表的每一个 hash 节点存放了相应query结果集在 cache 中的地址,以及该 query 所涉及到的一些 table 的相关信息;如果通过 hash 值匹配到了一样的 query,则直接将 cache 中相应的 query 结果集返回给客户端。如果 mysql 任何一个表中的任何一条数据发生了变化,便会通知query cache 需要与该 table 相关的query 的 cache 全部失效,并释放占用的内存地址。> query cache优缺点 >> 1. query 语句的 hash 计算和 hash 查找带来的资源消耗。mysql 会对每条接收到的 select 类型的 query 进行 hash 计算然后查找该query 的 cache 是否存在,虽然 hash 计算和查找的效率已经足够高了,一条query 所带来的消耗可以忽略,但一旦涉及到高并发,有成千上万条 query 时,hash计算和查找所带来的开销就的重视了;>> 2. query cache 的失效问题。如果表变更比较频繁,则会造成 query cache 的失效率非常高。表变更不仅仅指表中的数据发生变化,还包括结构或者索引的任何变化;>> 3. 对于不同 sql 但同一结果集的 query都会被缓存,这样便会造成内存资源的过渡消耗。sql 的字符大小写、空格或者注释的不同,缓存都是认为是不同的 sql(因为他们的 hash 值会不同);>> 4. 相关参数设置不合理会造成大量内存碎片,相关的参数设置会稍后介绍。
  4. readbuffersize >是 MySQL 读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL 会为它分配一段内存缓冲区。readbuffersize 变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。

14.若一张表中只有一个字段 VARCHAR(N)类型,utf8 编码,则 N 最大值为多少(精确到数量级即可)?

各文字のutf8ので、3つのバイトまで占めます。(65535-1-2)/ 3:65535超えないMySQLを定義された線の長さは、Nの最大値は次のように計算されます。その理由マイナス1は、第二バイトから実際のストレージで、マイナス2の理由は、あなたが3で割った長さの文字のリストの実際の長さを、保存したいので、理由はUTF8の制限です:各文字は3バイトまでかかります。

* 15. [SELECT長所と短所は何ですか]と書き込みの2種類の[すべてのフィールドを選択]?**

  1. 前者は必要としないデータディクショナリを、解析します
  2. 結果出力シーケンス、同じ順序でテーブル列の元建設、その指定されたフィールドに従って順序。
  3. 変更が必要な変更を必要としない名前を変更フィールド、
  4. 後者は、インデックスを最適化することができ、前者は最適化することができません
  5. かつての高い可読性よりも後者

16.HAVNG WHERE句との類似点と相違点?

  1. 構文:テーブルと列名は、別名を選択した結果を使用しました
  2. 結果の影響範囲:表データの行が読み込まれ、クライアントは、行の数を返しました
  3. インデックス:インデックスを使用していた、インデックスを使用できる場所、結果は唯一の操作を一時的にセットすることができ
  4. あなたは、集計関数を使用することはできません戻って、専門の使用集計関数を持ちます。

何のレコードの挿入がない場合、レコードが存在する場合17.MySQLは、更新、文はどのように書くには?

INSERT INTOテーブルDUPLICATE KEYUPDATEのC = C + 1をON(A、B、C)の値(1,2,3)。

18.MySQLインサートとは、select文の構文を更新します

SQL insert into student (stuid,stuname,deptid) select 10,'xzm',3from student where stuid > 8;
update student a inner join student b on b.stuID=10 seta.
stuname=concat(b.stuname, b.stuID) where a.stuID=10 ;

あなたの懸念は上を移動する私の前方の勢いで、感謝、お読みいただきありがとうございました。

プログラマのインタビューの準備書類:18古典的なMySQLのインタビュー話題の解像度、呉服シェア
マイクロチャンネル公衆番号へようこそ注意:建築ノート慕容の千個の言葉。ようこそ注意が一緒に進行します。

おすすめ

転載: blog.51cto.com/14409100/2431515