|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失本章我们就要解说一下怎样使用sql语句来查询出数据库中一切索引明细。固然了,我们能够在microsoftsqlservermanagementstudio当选择"表"->"索引"来检察单个表的索引明细。但如许,查询效力就很低了。
要使用sql查询出数据中一切索引,起首要懂得目次视图sys.indexes。
sys.indexes的界说以下:
每一个表格工具(比方,表、视图或表值函数)的索引或堆都包括一行。即这个视图中包括了数据库中一切的索引数据。详细列的申明以下:
列名数据范例申明object_idint该索引所属工具的ID。namesysname索引的称号。name只在该工具中是独一的。
NULL=堆index_idint索引的ID。index_id只在该工具中是独一的。
0=堆
1=会萃索引
>1=非会萃索引typetinyint索引的范例:
0=堆
1=会萃
2=非会萃
3=XMLtype_descnvarchar(60)索引范例的申明:
HEAP
CLUSTERED
NONCLUSTERED
XMLis_uniquebit1=索引是独一的。0=索引不是独一的。data_space_idint该索引的数据空间的ID。数据空间是文件组或分区计划。0=object_id是表值函数。ignore_dup_keybit1=IGNORE_DUP_KEY是ON。0=IGNORE_DUP_KEY是OFF。is_primary_keybit1=索引是PRIMARYKEY束缚的一部分。is_unique_constraintbit1=索引是UNIQUE束缚的一部分。fill_factortinyint>0=创立或从头天生索引时利用的FILLFACTOR百分比。0=默许值is_paddedbit1=PADINDEX是ON。0=PADINDEX是OFF。is_disabledbit1=禁用索引。0=不由用索引。is_hypotheticalbit1=索引是假定的,不克不及间接用作数据会见路径。假定的索引包括列级统计信息。0=索引不是假定的。allow_row_locksbit1=索引同意行锁。0=索引不同意行锁。allow_page_locksbit1=索引同意页锁。0=索引不同意页锁。
假如要查询到索引中的列信息,还必要分离目次视图sys.index_columns,这个视图中包括了一切索引中的列的信息。
详细列的申明以下:
列名数据范例申明object_idint界说了索引的工具的ID。index_idint界说了列的索引的ID。index_column_idint索引列的ID。index_column_id仅在index_id内是独一的。column_idintobject_id中的列的ID。
0=非会萃索引中的行标识符(RID)。
column_id仅在object_id中是独一的。key_ordinaltinyint键列集内的序数(从1入手下手)。
0=非键列,大概是XML索引。
因为xml范例的列不成对照,因而XML索引不会招致对基本列值排序。由于XML索引不是键,以是key_ordinal值将一直是0。partition_ordinaltinyint分区列集内的序数(从1入手下手)。
0=非分区列。is_descending_keybit1=索引键列接纳降序排序。
0=索引键列接纳升序排序。is_included_columnbit1=列是利用CREATEINDEXINCLUDE子句到场索引的非键列。
0=列不是包括性列。
要检察索引的数据明细,请参考以下链接:
使用sys.dm_db_index_physical_stats检察索引碎片等数据
分离这两个视图,再分离一些sql经常使用的体系表,我们能够写出以下sql来到达我们的目标。
selectt1.nameas表名,
t2.nameas索引名,
t4.index_column_idas列的序号
t5.nameas列名,
t6.nameas列的范例,
t6.max_lengthas列的最年夜长度,
t6.precisionas列的精度,
t6.scaleas列的小数位数
fromsys.objectst1
joinsys.objectst2ont2.parent_object_id=t1.object_id
joinsys.indexest3ont3.object_id=t2.parent_object_idandt3.name=t2.name
joinsys.index_columnst4ont4.object_id=t3.object_idandt4.index_id=t3.index_id
joinsys.columnst5ont5.object_id=t1.object_idandt5.column_id=t4.column_id
joinsys.typest6ont5.user_type_id=t6.user_type_id
固然了,怎样该列为varchar大概nvarchar等没有精度与小数位数的范例,precision与scale都即是0。
下面是查询一切索引的sql,假如只需检察一切的主键索引,加上过滤前提便可:
selectt1.nameasTableName,
t2.nameasPrimaryName,
t4.index_column_idasIndexColumnID,
t5.nameasColumnName,
t6.nameastypename,
t6.max_length,
t6.precision,
t6.scale
fromsys.objectst1
joinsys.objectst2ont2.parent_object_id=t1.object_id
joinsys.indexest3ont3.object_id=t2.parent_object_idandt3.name=t2.name
joinsys.index_columnst4ont4.object_id=t3.object_idandt4.index_id=t3.index_id
joinsys.columnst5ont5.object_id=t1.object_idandt5.column_id=t4.column_id
joinsys.typest6ont5.user_type_id=t6.user_type_id
wheret2.type=pk
下面是检察数据库中一切索引,假如只需检察单个表的索引,加上过滤前提便可:
selectt1.nameasTableName,
t2.nameasPrimaryName,
t4.index_column_idasIndexColumnID,
t5.nameasColumnName,
t6.nameastypename,
t6.max_length,
t6.precision,
t6.scale
fromsys.objectst1
joinsys.objectst2ont2.parent_object_id=t1.object_id
joinsys.indexest3ont3.object_id=t2.parent_object_idandt3.name=t2.name
joinsys.index_columnst4ont4.object_id=t3.object_idandt4.index_id=t3.index_id
joinsys.columnst5ont5.object_id=t1.object_idandt5.column_id=t4.column_id
joinsys.typest6ont5.user_type_id=t6.user_type_id
wheret2.type=pk
andt1.object_id=object_id(表名)
本章先容到这,但愿能给人人带来匡助。InnoDB数据表的索引,与InnoDB数据表相比,在InnoDB数据表上,索引对InnoDB数据表的重要性要大得多。在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。 |
|