mysql生產環境加索引_【生產篇】_MySQL環境下如何查看基于表的索引定義

【引言】

今天中午項目組來一需求,欲在MySQL環境的某張表下創建幾個BTREE索引。要創建索引,首先需要了解基表的表結構,以及已經包含的索引。Oracle的表結構大家都很熟悉,但MySQL表結構和已創建索引的查看怎么操作,本文將一一講述。

文章大綱

1.Oracle如何查看表結構和索引

2.MySQL如何查看表結構和索引

3.結語

一、Oracle如何查看表結構和索引

先來回顧下Oracle是如何查看表結構及表索引

首先查看oracle數據庫的單個表結構

使用Oracle的package包進行查看,其語法如下:

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_name \G

或者再簡單點,用如下一天命令一次查清楚基于某表的索引

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的語句那么復雜,之前自己在“我的DBA之路”中也說過一段話:“Oracle自治帶來的門檻并不意味著成為高級Oracle DBA的拿督降低”;但學好Oracle,對其他數據庫的設計理念和原理會幫助甚多。

【參考】

https://dev.mysql.com/doc/refman/8.0/en/show-index.html

【參考】

https://www.cnblogs.com/JokerShi/p/8087112.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373437.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hadoop模式介紹-獨立,偽分布式,分布式

了解了什么是Hadoop之后,讓我們在單機上啟動Hadoop: 這篇文章包含在ubuntu上安裝Hadoop的說明。 這是Hadoop安裝的快速分步教程。 在這里,您將獲得以獨立模式 (單節點集群)安裝Hadoop所需的所有命令及其說明&#xff0…

apk反編譯方式

一、Apk反編譯得到Java源代碼 下載上述反編譯工具包,打開apk2java目錄下的dex2jar-0.0.9.9文件夾,內含apk反編譯成java源碼工具,以及源碼查看工具。 apk反編譯工具dex2jar,是將apk中的classes.dex轉化成jar文件 源碼查看工具jdgui…

優化Hibernate所鼓勵的7大措施

優化Hibernate所鼓勵的7大措施: 1.盡量使用many-to-one,避免使用單項one-to-many2.靈活使用單向one-to-many3.不用一對一,使用多對一代替一對一4.配置對象緩存,不使用集合緩存5.一對多使用Bag 多對一使用Set6.繼承使用顯示多態 HQ…

如何用c 控制mysql數據庫_用C語言操作MySQL數據庫

函數描述mysql_affected_rows()返回上次UPDATE、DELETE或INSERT查詢更改/刪除/插入的行數。mysql_autocommit()切換autocommit模式,ON/OFFmysql_change_user()更改打開連接上的用戶和數據庫。mysql_charset_name()返回用于連接的默認字符集的…

數據結構(RMQ):POJ 3624 Balanced Lineup

Balanced LineupDescription For the daily milking, Farmer Johns N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer John decides to organize a game of Ultimate Frisbee with some of the cows. To keep things simple, he will take a conti…

Apache Thrift快速入門教程

Thrift是一種跨語言RPC框架,最初是在Facebook上開發的,現在作為Apache項目開源。 這篇文章將描述如何以不同的模式(例如阻塞,非阻塞和異步)編寫Thrift服務和客戶端。 (我覺得后兩種模式的文檔較少&#xff…

數組拆分為新數組

package com.classes;//已知數組a,將奇數位置元素存到b數組中,偶數位置元素存到c數組中public class Shuzu1118_4 { public static void main(String[] args) { int [] a{3,6,9,1,4,7,2,5,8}; int [] b; //定義數組b int [] c; //定義數組c//先找出數組…

java數組交集_java數組的交集和并集

前兩天給我出了一道題,求數組的并集和交集,然后我試著寫一下,很尷尬,由于長時間沒有寫過代碼,一開始數組是如何定義的給忘了。當時我說了我的思路,不過也是很low的做法,查閱網上的一些資料&…

ADF聲明性組件示例

在我以前的文章中,我答應展示如何為智能值列表創建ADF聲明性組件。 因此,我將創建一個包含三個元素的組件:標簽,輸入文本和值的組合框列表。 那很容易。 我在工作空間中創建了一個單獨的ADF ViewController項目: 在此項…

VS2015 安裝包缺失(聯網安裝失敗)問題解決

Win7 x86 測試可行 * 如果前面有嘗試過安裝不成功, 一定要用卸載程序刪除已安裝的部分,否則會出亂子. 1. 或者是用虛擬光驅加載ISO, 或者是解壓到硬盤上, 都沒有關系. 2. 用管理員權限啟動CMD控制臺, 進入VS2015 安裝盤的根目錄 (vs_enterprise.exe 所在的目錄). 3. 執行命令 …

java藍橋暑假班_Java實現 藍橋杯VIP 算法提高 班級排名

算法提高 班級排名時間限制:1.0s 內存限制:256.0MB問題描述達達在陶陶的影響下,也對學習慢慢的產生了興趣。他在每次考試之后,都會追著老師問,自己在班級的總名次是多少。考試一多,老師也不耐煩了&#xff…

$.ajax所犯的錯誤。success后面不執行

$.ajax({ type: post, url: ../AshxHandler/HandlerAddPhoto.ashx, data: { clientPath: photoName }, dataType: text, cache: false, success: function (data) { alert(1); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(上傳圖片出現錯誤&#xf…

WhateverOrigin –與Heroku和Play對抗相同的原產地政策! 構架

不久前,我在編碼 Bitcoin Pie時發現需要克服臭名昭著的Same Origin Policy ,該政策限制了運行在客戶端瀏覽器上的javascript可以訪問的域。 通過Stack Overflow,我找到了一個名為Any Origin的站點,這基本上是無需設置專用服務器即…

Solr集群更新配置的方式

solr集群中配置文件是經常更新的,頻率最高的也就是schema.xml和solrconfig.xml這兩個配置文件了,對于更新配置文件之前,我們先了解一下集群項目結構 由于在集群模式下,solrconfig.xml和schema.xml等配置文件都由Zookeeper集群管理…

java文本框雙擊可編輯_java swing 文本域雙擊變為可編輯

java swing如何實現文本域雙擊變為可編輯呢?給文本域添加鼠標事件監聽程序即可:resultTA1new AssistPopupTextArea();resultTA1.setEditable(false);resultTA1.setLineWrap(true);resultTA1.setWrapStyleWord(true);resultTA1.addMouseListener(new MouseAdapter() {Overridep…

點擊出現黑色背景的解決

-webkit-tap-highlight-color:rgba(0,0,0,0);轉載于:https://www.cnblogs.com/luckyXcc/p/6085582.html

OSGi簡介–模塊化Java

OSGi聯盟是這一擱淺的管理機構,它始于1999年。其最初目標是為網絡設備創建開放擱淺。 基于此思想,此規范也針對Java引入。 Eclipse在Java中是第一個。 他們于2004年6月推出了基于OSGi的Eclipse IDE。 OSGi是在Java中定義動態模塊的方法。 主要為Java實現…

HDU FatMouse's Speed 基本DP

題意:要求找到的體重遞增,速度遞減的老鼠,并且輸出最長的長度數,而且輸出各自的序列數。Special Judge 思路:先按體重由小到大排序,再找最長速度遞減序列。 轉移方程:mou[i].w>mou[j].w&am…

java xmpp openfire_搭建Xmpp服務器Openfire

step1、 安裝java環境這里是檢測是否安裝java的網頁如沒有安裝則進行以下步驟1、下載jdk7的mac版:jdk-7u79-macosx-x64.dmg2、安裝好之后,在命令行進入以下路徑查看#cd /Library/Java/JavaVirtualMachines/3、再查看你自己安裝的版本#ls版本為jdk-8u171-…

JavaFX移動應用程序最佳實踐,第1部分

到現在為止,所有對JavaFX感興趣的人都會知道,JavaFX Mobile發行了不久 前。 可以肯定的是,這真是令人難以置信。 我感到筋疲力盡,在發行期間我什至沒有精力去寫博客…… 但是到目前為止,我感到很恢復,并且希…