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.mzph.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发行了不久 前。 可以肯定的是,这真是令人难以置信。 我感到筋疲力尽,在发行期间我什至没有精力去写博客…… 但是到目前为止,我感到很恢复,并且希…