如何查询数据库已存在的索引

如何查询数据库已存在的索引,第1张

SELECT TableId=O.[object_id], TableName=O.Name, IndexId=ISNULL(KC.[object_id],IDX.index_id), IndexName=IDX.Name, IndexType=ISNULL(KC.type_desc,'Index'), Index_Column_id=IDXC.index_column_id, CColumnID=C.Column_id, CColumnName=C.Name, Sort=CASE INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending') WHEN 1 THEN 'DESC' WHEN 0 THEN 'ASC' ELSE '' END, PrimaryKey=CASE WHEN IDX.is_primary_key=1 THEN N'√'ELSE N'' END, [UQIQUE]=CASE WHEN IDX.is_unique=1 THEN N'√'ELSE N'' END, Ignore_dup_key=CASE WHEN IDX.ignore_dup_key=1 THEN N'√'ELSE N'' END, Disabled=CASE WHEN IDX.is_disabled=1 THEN N'√'ELSE N'' END, Fill_factor=IDX.fill_factor, Padded=CASE WHEN IDX.is_padded=1 THEN N'√'ELSE N'' END FROM sys.indexes IDX INNER JOIN sys.index_columns IDXC ON IDX.[object_id]=IDXC.[object_id] AND IDX.index_id=IDXC.index_id LEFT JOIN sys.key_constraints KC ON IDX.[object_id]=KC.[parent_object_id] AND IDX.index_id=KC.unique_index_id INNER JOIN sys.objects O ON O.[object_id]=IDX.[object_id] INNER JOIN sys.columns C ON O.[object_id]=C.[object_id] AND O.type='U' AND O.is_ms_shipped=0 AND IDXC.Column_id=C.Column_id --INNER JOIN -- 对于一个列包含多个索引的情况,只显示第1个索引信息 --( --SELECT [object_id], Column_id, index_id=MIN(index_id) --FROM sys.index_columns --GROUP BY [object_id], Column_id --) IDXCUQ --ON IDXC.[object_id]=IDXCUQ.[object_id] --AND IDXC.Column_id=IDXCUQ.Column_id

删除索引可以使用ALTER TABLE或DROP INDEX语句来实现,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,其格式如下:

DROP INDEX index_name ON talbe_name

ALTER TABLE table_name DROP INDEX index_name

ALTER TABLE table_name DROP PRIMARY KEY

注:其中,前两条语句是等价的,删除掉table_name中的索引index_name。

扩展资料:

索引的使用及注意事项 

EXPLAIN可以帮助开发人员分析SQL问题,explain显示了mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句。

使用方法,在select语句前加上Explain就可以了:Explain select * from user where id=1

尽量避免这些不走索引的sql:

SELECT `sname` FROM `stu` WHERE `age`+10=30-- 不会使用索引,因为所有索引列参与了计算

SELECT `sname` FROM `stu` WHERE LEFT(`date`,4) <1990-- 不会使用索引,因为使用了函数运算,原理与上面相同

SELECT * FROM `houdunwang` WHERE `uname` LIKE'后盾%' 走索引

SELECT * FROM `houdunwang` WHERE `uname` LIKE "%后盾%" 不走索引

正则表达式不使用索引,这应该很好理解,所以为什么在SQL中很难看到regexp关键字的原因。

字符串与数字比较不使用索引

CREATE TABLE `a` (`a` char(10))

EXPLAIN SELECT * FROM `a` WHERE `a`="1" 走索引

EXPLAIN SELECT * FROM `a` WHERE `a`=1 不走索引

下面讲述在SQL Server数据库中删除已建立索引的 *** 作步骤。

设备:华硕电脑

系统:xp

软件:SQL Server 2019

1、首先点击开始按钮,选择“sql server管理器”选项。

2、在d出的对话框中,选择连接和验证方式,点击“连接”按钮。

3、选择“ceshi”,点击表选项卡,选择“索引xueshengsuoyin”,右键选择“删除”选项。

4、最后在“删除对象”对话框中,选择要删除的对象,点击确定按钮,就完成了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10039767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存