MariaDB社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3138|回复: 3
打印 上一主题 下一主题

下面这种情况哪种速度更快啊?

[复制链接]
跳转到指定楼层
1#
发表于 2009-5-10 11:45:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假设有两个表A和B,其中A表中有字段aid(可以是主键),maker等。B表中包含字段bid,idlist等。在A表中查找maker是bid的所有记录,按下面两种方式,哪一种更快呢?
1,直接用一条sql语句“select * from A where make=bid”
2,将A表中maker为bid的提前存入B表的idlist中(比如说每生成一条A表中的记录,就先查找B表中对应maker为bid的记录,而后将其中的idlist更新),idlist字段以某个字符分隔(如“|”等),这样的话就先查找B表中对应maker为bid的记录,而后取出idlist字段,用explode形成id数组,然后根据这个数组,一个个的遍历查找A表中对应aid的记录。
个人感觉在数据量小的情况下方法1比较快,因为只有一条语句,数据库只用进行一次操作。在数据量很大的时候(比如说几十万)方法2快,因为不用遍历所有的数据,只用查找对应的几个就行了,尤其是aid是主键的情况查找会不会更快呢?大家给个建议好么,还有如果有其他更好的方法也请不吝赐教阿!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
2#
发表于 2009-5-11 14:16:09 | 只看该作者
感觉还是1快...
加索引
3#
 楼主| 发表于 2009-5-12 20:24:21 | 只看该作者
谢谢kider的回复。

那这里要进一步请教两个问题:

一是如果对idlist里包含的id数做限制(也就是说每在A中插入一条记录前先看看idlist包括的id有多少,没有超过限制才能插入),限制到2-5个,idlist里的id数顶多就5个,那这样的话方法2会不会比方法1合适

二是如果maker是多个bid组成的,比如说是类似“5|8|12”这样的字符串,我想要查找make包含有当前bid的的记录,用索引还能适用么?如果是的话,sql语句应该怎么写呢?

谢谢!
4#
发表于 2009-5-12 22:51:14 | 只看该作者
1、你的方法也可以,主要看你的实际需求,如果你只有或能限制在5个,而实际也是这样的,那就用你的算法
2、一般索引是用不到,因为你要匹配其中的某个,或许就只是字符串的某段。fulltext应该可以。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|MariaDB社区 ( 京ICP备07012489号    |
业务联系: QQ:48474881; 邮箱: 48474881@qq.com; 电话:13911732319
声明:本站部分文章是网友转载,若未经作者同意或署名有误,请联系网站管理员。

GMT+8, 2024-11-1 18:30 , Processed in 0.092457 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表