加载中…
个人资料
代码学堂
代码学堂
  • 博客等级:
  • 博客积分:0
  • 博客访问:6,157
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

[转载]mysql索引优化详解

(2017-07-09 13:13:45)
标签:

mysql

索引

分类: 我要学代码

索引是数据库调优重要的一方面,索引占用大量的表空间,所以索引必须要定期来维护。就目前的数据库而言,索引大概可以分为两个类型,以oracle、db2,msql为代表的行索引,而以sysbase为代表的列索引(位索引),下面就以行索引和大家做一详细的探讨。

1、索引占用大量的空间:

----------建立测试表
if object_id('ppp') is null
drop table ppp
go
create table ppp (a int , b xml)
insert into ppp
select 1,'dsfsd'

-------------查看表空间
exec  sp_spaceused  ppp

-------建立非聚凑索引
create index index_name on ppp(a)

-------------查看表空间
exec  sp_spaceused  ppp

从上边的例子看出 索引占用大量表空间

2、建立主键的时候,数据库引擎会自动建立聚凑索引,这对索引是个浪费,因为很少有人把主键当搜索条件。

3、索引的填充因子是索引页面的填充率的概念,如果填充小子设置的大,就容易插入,这样的索引页面的数据比较松散,查询比较困难,如果填充因子小,查询容易,插入就困难,一般我建议用40-50就可以。但是sql 2005在新建索引的时候,索引的填充因子默认为0

4、要定期对索引进行分析,下边以例子来说明:

---查询索引的名字
sp_helpindex join_product_ty

---分析索引
dbcc  showcontig (join_product_ty,PK_join_product_ty)

参数的作用,请参考msdn。

5、要定期对索引进行重建

DECLARE @database_name sysname
DECLARE @syntax sysname

DECLARE CUR_database CURSOR FOR
 SELECT name FROM sysobjects where xtype = 'u'
OPEN CUR_database

FETCH NEXT FROM CUR_database INTO @database_name
WHILE @@FETCH_STATUS = 0

BEGIN
SELECT @syntax = 'DBCC DBREINDEX (, '''',0)'
EXEC (@syntax)

PRINT @database_name + '重建索引完成'
FETCH NEXT FROM CUR_database INTO @database_name
END

--release memory
CLOSE CUR_database
DEALLOCATE CUR_database

GO
DBCC CHECKDB
GO

转载请注明:代码学堂>数据库 MySQL教程 > mysql索引优化详解

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有