免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2045 | 回复: 7
打印 上一主题 下一主题

mysql 索引问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-23 15:48 |只看该作者 |倒序浏览
高手们好 俺声明下是菜鸟

既然mysql 用索引很快 为什么不在每个字段都建立索引呢

谢谢 不要笑话俺

论坛徽章:
0
2 [报告]
发表于 2009-06-24 00:16 |只看该作者

回复 #1 pxllonga 的帖子

1.索引不是万能的!索引可以加快数据检索(select)操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程序上弥补这一缺陷,许多SQL命令都有一个 DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE选项的作用将非常明显。

2.另外,索引还会在硬盘上占用相当大的空间。因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。

论坛徽章:
0
3 [报告]
发表于 2009-06-24 08:35 |只看该作者
建多了也会很影响速度,适可而止。建立必要的索引会提升若干性能

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
4 [报告]
发表于 2009-06-24 10:32 |只看该作者
看mysql手册

论坛徽章:
0
5 [报告]
发表于 2009-06-24 17:11 |只看该作者
都建索引的话,你的内存能把所有索引放到内存吗?如果不能,查询记录时加载索引会导致SQL运行的时间变长很多,而且更新数据的时候也会严重影响效率,完全没有必要

论坛徽章:
0
6 [报告]
发表于 2009-06-24 17:43 |只看该作者
原帖由 yangward 于 2009-6-24 00:16 发表
从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。 ...


这个地方有可能你记混了,正确的解释:每种引擎支持最少16个索引,每个索引最多可以包含16个列.


对于索引要有一个正确的态度,索引是加快Select,Update的最佳方法.但不是每一列都适合建索引.例如:男,女这种列.
另外对于你每一列都建一个索引,也不一定能让你的SQL语句能正确用上.

  索引需要建时,就建,特别有的语句需要多列的联合索引,单例的索引不一定能工作的.所以索引是思考后建的,不是写一个脚本就可以全部搞定的.

论坛徽章:
0
7 [报告]
发表于 2009-06-24 19:11 |只看该作者
同意楼上意见, 要建区分度高的索引

论坛徽章:
0
8 [报告]
发表于 2009-06-25 14:33 |只看该作者
谢谢大家 能说的再全点就好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP