mysql8.0が来ます

Feb 07, 2017 pm 04:33 PM

MySQL は、スウェーデンの MySQL AB 社によって開発された、オープンソースの小規模リレーショナル データベース管理システムです。現在、MySQL はインターネット上の中小規模の Web サイトで広く使用されています。 MySQL は、サイズが小さく、速度が速く、総所有コストが低く、特にオープンソースの特性により、Web サイトの総所有コストを削減するために、多くの中小規模の Web サイトが Web サイト データベースとして MySQL を選択しています。

MySQL 開発チームは 12 日に MySQL 8.0.0 開発マイルストーン バージョン (DMR) のリリースを発表しました。 MySQL がなぜ 5.x から 8.0 に急上昇したのかに驚く人もいるかもしれません。実際、MySQL 5.x シリーズは Oracle による買収前は 5.1 であり、買収後は 5.5、5.6、5.7 などと 5.x が維持されてきました。実際、元のリリース リズムに従う場合、5.6.x は 6.x、5.7.x は 7.x と考えることができます。したがって、バージョンの命名方法を変更しただけです。

mysql8.0が来ます

しかし、今回リリースされた MySQL 8.0.0 開発版にはまだ多くのハイライトがあります。

MySQL 8.0.0 のハイライト

トランザクション データ ディクショナリは MyISAM ストレージ エンジンから完全に分離されました

データ ディクショナリは実際に InnoDB の一部のテーブルに配置され、FRM、TRG、および PAR ファイルはもう必要ありません。情報スキーマがデータ ディクショナリ テーブルのビューとして表示されるようになりました。原則として、MyISAM データ テーブル タイプはまったく必要なく、すべてのシステム テーブルを InnoDB に配置できます。

SQL ロール

ロールは権限の集合です。ロールを作成したり、ユーザーにロールを付与したり削除したりできます。これは権限管理に便利です。

utf8mb4 文字セットがデフォルトの文字セットになり、Unicode 9 をサポートします

デフォルトの文字セットは latin1 から utf8mb4 に変更され、デフォルトの順序照合順序は latin1_swedish_ci から utf8mb4_800_ci_ai に変更されます。

非表示インデックス

一部のインデックスは、SQL オプティマイザーが使用しないように非表示に設定できますが、バックグラウンドで更新され続けます。必要に応じていつでも可視性を回復できます。

バイナリデータに対してビット演算を実行可能

BIGINTに対してビット演算を実行できるだけでなく、8.0からは[VAR]BINARY/[TINY|MEDIUM|LONG]BLOBに対するビット演算もサポートされています。

IPv6 と UUID の操作が改善されました

INET6_ATON() と INET6_NTOA() はビット操作を実行できるようになりました。これは、INET6_ATON() が VARBINARY(16) データ型 (128 ビット) を返すようになったためです。 UUID の操作が改善され、3 つの新しい関数 UUID_TO_BIN()、BIN_TO_UUID()、および IS_UUID() が導入されました。 MySQL には特別な IPv6 および UUID データ型はありませんが、VARBINARY(16) データ型で格納されます。

永続的なグローバル変数

SET PERSIST を使用して永続的なグローバル変数を設定できます。この変数は、サーバーが再起動されても維持されます。

パフォーマンス データベースのパフォーマンス スキーマの改善

たとえば、より高速な検索を可能にするために、100 を超えるインデックスがパフォーマンス データベースに追加されました。

SQL アナライザーをリファクタリングします

SQL アナライザーを継続的かつ段階的に改善します。古いパーサーには、構文の複雑さとトップダウン解析アプローチにより重大な制限があり、維持および拡張が困難でした。

コスト モデル

InnoDB バッファーは、メイン メモリ キャッシュにあるテーブルとインデックスの数を推定できるようになりました。これにより、アクセス方法を選択するときに、オプティマイザーがデータをメモリに保存できるか、ディスクに保存する必要があるかを認識できるようになります。

ヒストグラム

ヒストグラムを使用すると、ユーザーまたは DBA はデータ分布に関する統計を作成でき、これをクエリの最適化に使用して、最適化されたクエリ ソリューションを見つけることができます。

スキャン パフォーマンスの向上

InnoDB 範囲クエリのパフォーマンスが向上しました。これにより、フル テーブル クエリと範囲クエリのパフォーマンスが 5 ~ 20% 向上します。

BLOB の再構築

BLOB を再構築すると、フラグメントの読み取り/更新操作が高速化され、JSON データ操作が高速化されます。

永続的な自動インクリメント値

InnoDB は、自動インクリメント シーケンスの最大値を REDO ログに永続化します。この改善により、非常に古いバグ番号 199 も修正されました。

一時テーブル

圧縮された一時テーブルのサポートを削除し、一時テーブルのメタデータをメモリに保存します。

さらに重要な改善点と詳細については、MySQL 8.0.0 リリースのお知らせ [1] とこちら [2] を参照してください。

ダウンロード

現在、8.0.0 はまだ開発バージョンです。最新の機能を体験してテストしたい場合は、dev.mysql.com[3] から各プラットフォームのインストール パッケージをダウンロードできます。ただし、MySQL ソフトウェア パッケージはますます大きくなり、Linux プラットフォーム上のバイナリ パッケージは 1 GB 近くになります。運用環境で使用する場合は、8.0 が安定バージョンになる前に、5.7 シリーズを引き続き使用してください。最新バージョンは 5.7.15 GA バージョンであり、これはわずか 600 M を超えます。

最新のソース コードは GitHub にあります。興味のある方は、中国人からの投稿をご覧ください。

MySQL 8.0 以降、非表示インデックス機能、いわゆる非表示インデックスがサポートされています。非表示のインデックスの場合、オプティマイザは単にそれらを無視します。この機能を通じて、オプティマイザーの動作に影響を与えることができます。また、これはインデックスを削除する前のバッファとみなすこともできます。インデックスを一時的に非表示に設定した後、アプリケーションが正常であるか、エラーなどが発生していないかを観察し、問題がなければ最終的に削除します。 。

8.0.0 の対応するリリースノート:

mysql8.0が来ます

Test

# 创建一个普通的表t1,只带主键
mysql> create table t1 (a int primary key auto_increment, b int, c int, d int);
Query OK, 0 rows affected (0.67 sec)
# 增加一个索引
mysql> alter table t1 add key(b);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> show indexes from t1\G
*************************** 1. row ***************************
        Table: t1
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: a
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
*************************** 2. row ***************************
        Table: t1
   Non_unique: 1
     Key_name: b
 Seq_in_index: 1
  Column_name: b
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
2 rows in set (0.01 sec)
从show indexes的visible列显示了,这两个索引都是可见的。
# Load some data
insert into t1 select NULL, rand()*100000, rand()*10000,rand()*10000;
insert into t1 select NULL, rand()*100000, rand()*10000,rand()*10000 from t1;
insert into t1 select NULL, rand()*100000, rand()*10000,rand()*10000 from t1;
....
analyze table t1;
mysql> explain select * from t1 where b > 5000 limit 10;
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+-----------------------+
| id | select_type | table | partitions | type  | possible_keys | key  | key_len | ref  | rows | filtered | Extra            |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+-----------------------+
|  1 | SIMPLE     | t1   | NULL     | range | b         | b   | 5     | NULL | 1932 |   100.00| Using index condition |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+-----------------------+
1 row in set, 1 warning (0.00 sec
可以看到索引b被使用到
# 修改索引b为不可见
mysql> alter table t1 alter index b invisible;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> show indexes from t1\G
*************************** 1. row ***************************
        Table: t1
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: a
    Collation: A
  Cardinality: 2048
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
*************************** 2. row ***************************
        Table: t1
   Non_unique: 1
     Key_name: b
 Seq_in_index: 1
  Column_name: b
    Collation: A
  Cardinality: 2029
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: NO
2 rows in set (0.01 sec)
mysql> explain select * from t1 where b > 5000 limit 10\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t1
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 2048
     filtered: 33.33
        Extra: Using where
1 row in set, 1 warning (0.00 sec)
当索引被修改为invisible后,优化器将不再选择这个索引
# 将索引重新修改为可见
mysql> alter table t1 alter index b visible;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> explain select * from t1 where b > 5000 limit 10\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t1
   partitions: NULL
         type: range
possible_keys: b
          key: b
      key_len: 5
          ref: NULL
         rows: 1932
     filtered: 100.00
        Extra: Using index condition
1 row in set, 1 warning (0.00 sec)
# 你也可以在创建索引的时候显式指定是否可见
mysql> alter table t1 add key(c) invisible;
Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> show indexes from t1 where key_name = 'c'\G
*************************** 1. row ***************************
        Table: t1
   Non_unique: 1
     Key_name: c
 Seq_in_index: 1
  Column_name: c
    Collation: A
  Cardinality: 1848
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: NO
1 row in set (0.01 sec)
# 或者在建表时指定关键字
mysql> create table t2 (a int primary key, b int, key(b) invisible);
Query OK, 0 rows affected (0.67 sec)
# 但primary key不可以设置为不可见
mysql> drop table t2;
Query OK, 0 rows affected (0.03 sec)
mysql> create table t2 (a int, b int, primary key(a) invisible);
ERROR 3522 (HY000): A primary key index cannot be invisible
ログイン後にコピー


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Mar 19, 2025 pm 03:51 PM

この記事では、MySQLのAlter Tableステートメントを使用して、列の追加/ドロップ、テーブル/列の名前の変更、列データ型の変更など、テーブルを変更することについて説明します。

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? Mar 18, 2025 pm 12:01 PM

記事では、証明書の生成と検証を含むMySQL用のSSL/TLS暗号化の構成について説明します。主な問題は、セルフ署名証明書のセキュリティへの影響を使用することです。[文字カウント:159]

人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? 人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? Mar 21, 2025 pm 06:28 PM

記事では、MySQLワークベンチやPHPMyAdminなどの人気のあるMySQL GUIツールについて説明し、初心者と上級ユーザーの機能と適合性を比較します。[159文字]

MySQLの大きなデータセットをどのように処理しますか? MySQLの大きなデータセットをどのように処理しますか? Mar 21, 2025 pm 12:15 PM

記事では、MySQLで大規模なデータセットを処理するための戦略について説明します。これには、パーティション化、シャード、インデックス作成、クエリ最適化などがあります。

INNODBフルテキスト検索機能を説明します。 INNODBフルテキスト検索機能を説明します。 Apr 02, 2025 pm 06:09 PM

INNODBのフルテキスト検索機能は非常に強力であり、データベースクエリの効率と大量のテキストデータを処理する能力を大幅に改善できます。 1)INNODBは、倒立インデックスを介してフルテキスト検索を実装し、基本的および高度な検索クエリをサポートします。 2)一致を使用してキーワードを使用して、ブールモードとフレーズ検索を検索、サポートします。 3)最適化方法には、単語セグメンテーションテクノロジーの使用、インデックスの定期的な再構築、およびパフォーマンスと精度を改善するためのキャッシュサイズの調整が含まれます。

ドロップテーブルステートメントを使用してMySQLにテーブルをドロップするにはどうすればよいですか? ドロップテーブルステートメントを使用してMySQLにテーブルをドロップするにはどうすればよいですか? Mar 19, 2025 pm 03:52 PM

この記事では、ドロップテーブルステートメントを使用してMySQLのドロップテーブルについて説明し、予防策とリスクを強調しています。これは、バックアップなしでアクションが不可逆的であることを強調し、回復方法と潜在的な生産環境の危険を詳述しています。

外国の鍵を使用して関係をどのように表現しますか? 外国の鍵を使用して関係をどのように表現しますか? Mar 19, 2025 pm 03:48 PM

記事では、外部キーを使用してデータベース内の関係を表すことで、ベストプラクティス、データの完全性、および避けるべき一般的な落とし穴に焦点を当てています。

JSON列にインデックスを作成するにはどうすればよいですか? JSON列にインデックスを作成するにはどうすればよいですか? Mar 21, 2025 pm 12:13 PM

この記事では、クエリパフォーマンスを強化するために、PostgreSQL、MySQL、MongoDBなどのさまざまなデータベースでJSON列にインデックスの作成について説明します。特定のJSONパスのインデックス作成の構文と利点を説明し、サポートされているデータベースシステムをリストします。

See all articles