免费注册 查看新帖 |

Chinaunix

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

Mysql多列索引问题请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-12 09:55 |只看该作者 |倒序浏览
假设现在有一表 字段A-D 约20万条数据
四个字段A B C D均有被独立当作条件搜索的机会 且均等
而同时A&B&C A&C&D A&B&C&D A&B&D A&*&*...
B&C&D B&C B&D..
C&D 这样的检索条件也存在

根据Mysql一次查询只能适用一个索引的原则
整个表的索引应该如何做呢?

论坛徽章:
0
2 [报告]
发表于 2007-08-12 14:35 |只看该作者
1. 高版本的mysql支持merge index
2. 根据查询平率的高低创建不同的(联合)索引

ps,你的查询条件比较bt

论坛徽章:
0
3 [报告]
发表于 2007-08-13 08:45 |只看该作者
多谢楼上回复
请问5.0+的mysql时候能支持merge index?
支持的话是否需要我显示的用using union语句来表明 还是说mysql会自动merge?

多谢~

论坛徽章:
0
4 [报告]
发表于 2007-08-13 08:50 |只看该作者
索引必须是连续的,所以从这个出发点,只能建立一个union的ABCD的索引,如同上面说的,假如要查C,但你可以把A 和 B 加个永真进去,放在C条件前,就利用上了ABCD的union索引


有朋友给出了我这样的答复 我用explain测试发现确实可以用这种方法利用ABCD索引
不知道别的朋友对这个用法有什么看法和评价么

论坛徽章:
0
5 [报告]
发表于 2007-08-13 14:02 |只看该作者

回复 #4 kirkcolors 的帖子

用这个解决方法冗余太大了吧。

之所以有人认为一次查询只能适用一个索引,是由于索引合并优化算法的缺陷,遇到这种情况,可以通过使用IGNORE INDEX或FORCE INDEX让优化器考虑index_merge。

论坛徽章:
0
6 [报告]
发表于 2007-08-14 08:48 |只看该作者
原帖由 sunnyfun 于 2007-8-13 14:02 发表
用这个解决方法冗余太大了吧。

之所以有人认为一次查询只能适用一个索引,是由于索引合并优化算法的缺陷,遇到这种情况,可以通过使用IGNORE INDEX或FORCE INDEX让优化器考虑index_merge。

请问所谓冗余冗余在何处呢?在数据库的效率上还是在程序的编写上?
如果要强制merge index 要怎么做呢?

论坛徽章:
0
7 [报告]
发表于 2007-08-14 10:07 |只看该作者
原帖由 kirkcolors 于 2007-8-13 08:50 发表


有朋友给出了我这样的答复 我用explain测试发现确实可以用这种方法利用ABCD索引
不知道别的朋友对这个用法有什么看法和评价么



这种方法是可行的

reference:http://dev.mysql.com/doc/refman/5.0/en/index-merge-intersection.html

论坛徽章:
0
8 [报告]
发表于 2007-08-16 08:04 |只看该作者
多谢楼上~

论坛徽章:
0
9 [报告]
发表于 2007-08-16 09:21 |只看该作者
7楼的只是mysql内部如何将查询优化吧。
如何强制index_merge参见IGNORE INDEX或FORCE INDEX语法。
需要注意的是,有时候并不一定用到所有索引就是最快的。

论坛徽章:
0
10 [报告]
发表于 2007-08-16 13:38 |只看该作者
请问楼上
为什么说用到Union索引不是最快的?
怎么会更快呢? 不用的话岂不是扫描一定结果集的所有行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP