MariaDB社区

标题: 下面这种情况哪种速度更快啊? [打印本页]

作者: wangwei626    时间: 2009-5-10 11:45
标题: 下面这种情况哪种速度更快啊?
假设有两个表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是主键的情况查找会不会更快呢?大家给个建议好么,还有如果有其他更好的方法也请不吝赐教阿!
作者: kider    时间: 2009-5-11 14:16
感觉还是1快...
加索引
作者: wangwei626    时间: 2009-5-12 20:24
谢谢kider的回复。

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

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

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

谢谢!
作者: kider    时间: 2009-5-12 22:51
1、你的方法也可以,主要看你的实际需求,如果你只有或能限制在5个,而实际也是这样的,那就用你的算法
2、一般索引是用不到,因为你要匹配其中的某个,或许就只是字符串的某段。fulltext应该可以。




欢迎光临 MariaDB社区 (http://123.56.88.72/) Powered by Discuz! X3.2