MySQL環境でのテーブルベースのインデックス定義の表示方法

5812 ワード

【引用】今日のお昼にプロジェクトチームから需要が来て、MySQL環境のある表の下でいくつかのBTREEインデックスを作成したいと思っています.インデックスを作成するには、まずベース・テーブルのテーブル構造と、すでに含まれているインデックスを理解する必要があります.Oracleのテーブル構造はよく知られていますが、MySQLのテーブル構造と作成されたインデックスの表示方法については、ここで説明します.
文章のアウトライン1.Oracleでは、テーブル構造とインデックスをどのように表示するか2.MySQLはテーブル構造とインデックスをどのように表示しますか.締めくくり1、Oracleはどのように表構造と索引を表示するかまず、Oracleがどのように表構造と表索引を表示するかを振り返る.まずoracleデータベースの単一テーブル構造を表示するには、Oracleのパッケージを使用します.構文は次のとおりです.DBMS_METADATA.GET_DDL ( object_type IN VARCHAR2, name IN VARCHAR2, schema IN VARCHAR2 DEFAULT NULL, version IN VARCHAR2 DEFAULT ‘COMPATIBLE’, model IN VARCHAR2 DEFAULT ‘ORACLE’, transform IN VARCHAR2 DEFAULT ‘DDL’) RETURN CLOB;
公式の例は次のとおりです.
Example: Fetch the DDL for all Complete Tables in the Current Schema, Filter Out Nested Tables and Overflow Segments
This example fetches the DDL for all "complete" tables in the current schema, filtering out nested tables and overflow segments. The example uses SET_TRANSFORM_PARAM (with the handle value = DBMS_METADATA.SESSION_TRANSFORM meaning "for the current session") to specify that storage clauses are not to be returned in the SQL DDL. Afterwards, the example resets the session-level parameters to their defaults.

To generate complete, uninterrupted output, set the PAGESIZE to 0 and set LONG to some large number, as shown, before executing your query.

SET LONG 2000000
SET PAGESIZE 0
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
     FROM USER_ALL_TABLES u
     WHERE u.nested='NO' 
     AND (u.iot_type is null or u.iot_type='IOT');
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'DEFAULT');

ここでは簡単な操作を使用します.コマンドは次のとおりです.
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE',TABLE_NAME,’SCHEMA’) FROM DUAL;


注意:パラメータ「TABLE」はクエリーするオブジェクトであり、テーブル構造を調べるため「TABLE」である.パラメータTABLE_NAMEは調べる表名で、表名は大文字でなければならないことに注意します.パラメータ'SCHEMA'はテーブルが属する所有者であり、大文字も必要である
注意:上記の文を実行すると、テーブル作成文全体の一部にすぎない可能性があります.完全で途切れない出力を生成するには、クエリーを実行する前にPAGESIZEを0に設定し、LONGを次のように大きく設定します.
SQL> SET LONG 2000000
SQL> SET PAGESIZE 0
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE',TABLE_NAME,’SCHEMA’) FROM DUAL;

2.Oracleのテーブルに含まれるインデックスを表示ユーザーアカウントを使用してログインするとuser_を問合せます.indexes SQL> select * from user_indexes where table_name=upper(‘table_name’); sysアカウントを使用してログインした場合、dba_をクエリーします.indexes SQL> select * from user_indexes where table_name=upper(‘table_name’);
注意:upper関数は、インプリメンテーション小文字を大文字に変換します.
3.上記の索引名に基づいて索引ベースのフィールド/属性列を表示する
SQL> select * from dba_ind_columns where index_name = upper('index_name');


インデックス名を大文字にするか、upper関数で大文字に変換します.
これで、Oracle環境でテーブル構造とそのベースインデックスの表示方法について説明します.
次に、MySQL環境でテーブル構造とインデックスを表示する方法を見てみましょう.
二、MySQL環境の下でどのようにテーブル構造とインデックスMySQL環境を見て、あなたはクエリ文の簡単な人を怒らせることを発見することができます;簡単には、mysql>use schema_name; –表構造定義の表示mysql>SHOW create table table_name\G; –テーブルのインデックスを表示するmysql>SHOW INDEX FROM table_nameGまたはさらに単純な点は、次の日にコマンドでテーブルベースのインデックスを一度に確認します.
mysql> SHOW INDEX FROM mydb.mytable;

終わりました.サプライズで、意外で、気持ちがいいです.
Oracleの紹介が重く、MySQLが軽い疑いを避けるため、公式サイトのMySQLのインデックス部分を具体的に紹介します.MySQL官网查看索引的语法:SHOW INDEX Syntax SHOW[EXTENDED]{INDEX|INDEXES|KEYS}{FROM|IN}tbl_name [{FROM | IN} db_name] [WHERE expr]
例は次のとおりです.
mysql> show indexes IN  my_schema.`ethan_table` \G
*************************** 1. row ***************************
        Table: ethan_table
   Non_unique: 1
     Key_name: idx_ethan_table
 Seq_in_index: 1
  Column_name: order_id
    Collation: A
  Cardinality: 368831
     Sub_part: NULL
       Packed: NULL
         Null: 
   Index_type: BTREE
      Comment: 
Index_comment: 
      Visible: YES
   Expression: NULL
2 rows in set (0.00 sec)

この図から分かるようにkey_name「idx_ethan_table」はインデックスの名前であり、テーブルethan_に基づいているtableのプロパティ列order_id作成、タイプBTREEインデックス.
SHOW INDEXは以下の主なフィールドを返します.
Non_unique
           ,  0;    ,  1。
Key_name
     。       ,        。
Seq_in_index
        , 1  。
Column_name
  。
Collation
          。     A(  )、D(  ) NULL(   )。
Cardinality
            。       ,  ANALYZE TABLE (  MyISAM )myisamchk -a。
                    ,        ,           。    ,MySQL               。
Sub_part
     。    ,           ,        ;          ,  NULL。
  
            。  ,CREATE TABLE、ALTER TABLE CREATE index                         (CHAR、VARCHAR、TEXT)             (binary、VARBINARY、BLOB)    。                          ,       。
Packed
        。    ,   。
Null
         ,   “ ”;       ,   “ ”。
Index_type
       (BTREE、FULLTEXT、HASH、RTREE)。
Comment
                   ,  ,       ,     。
Index_comment
        comment            。
Visible
          。
Expression
MySQL 8.0.13             (        ),     Column_name     :
         ,Column_name          ,    NULL。
        ,Column_name  NULL, Expression         。

テーブルインデックスに関する情報もINFORMATION_からSCHEMA統計テーブルで取得します.インデックスを隠す拡張情報は、拡張インデックスを表示することによってのみ実現できます.統計テーブルから取得できません.*shell>mysqlshow[options][db_name[tbl_name[col_name]**コマンドを使用して、テーブルのインデックスをリストできます.
例は、shell>mysqlshow-k-uroot-p my_schema ethan_table order_id
これで、MySQL環境でテーブル構造とそのベースインデックスをどのように表示するかについて説明します.
【結語】1.この文書では、Oracle環境でテーブル構造とそのベースインデックスをどのように表示するか、MySQLでのより人間的で簡単な表示文をレビューします.2.MySQL 8.0.13以降、shell>mysqlshow[options][db_name[tbl_name[col_name]]コマンドを使用してテーブルのインデックスをリストできます.3.感悟して、OracleとMySQLを熟知している親はすでに深く体得しているかもしれないが、MySQLは文の簡潔性、使いやすさに大きな工夫を凝らしており、Oracleの文ほど複雑ではない.しかし、Oracleをマスターすることは、他のデータベースの設計理念と原理に役立ちます.
【参考】https://dev.mysql.com/doc/refman/8.0/en/show-index.html【参考】https://www.cnblogs.com/JokerShi/p/8087112.html