【求助】表A记录1万,表B记录10万,如果COUNT 更快?每次只能100个也还是很慢

用户昵称不能为空 2012-03-02 09:53:59

数据库DB 【表A】是存放过滤关键词的表,字段 id,wd,count。目前有记录1万。
数据库DB 【表B】是存分类谷歌信息的表,字段 tid,title,content。目前有记录10万。

有一个自检功能,程序自动的获取A表的字段wd后,将统计到的表B字段content匹配的个数存放到表A的字段count中。
流程如下:



<?php

$queryA = DB::query("SELECT * FROM A LIMIT 100 ");
while($rowA = DB::fetch($queryA))
{
$id = $rowA['id'];
$wd = $rowA['wd'];
$count = DB::result_first("SELECT COUNT(*) FROM B WHERE `content` LIKE '%$wd%' ");
DB::query("UPDATE A SET `count`='$count' WHERE id='$id' ");
}




但是现在有一个问题就是查询太慢了,每次只查询A表100个还是那样。如何让查询快速?

表A,字段id 主键,自动递增。字段wd 唯一。字段count int(10)。
表B,字段tid主键,自动递增。
...全文
1086 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
一个贴吧 一个独立处理单元(可以分目录,分表,分端口,分服务器...etc)
不要老想去索引。。散列原理才靠普。
凡是巨量的数据,都必须散列...
不要指望银河计算多么多么给力,给力也是分布式运算。。还是散列原理..
优良的代码不如优良的架构.
samyou 2012-03-12
  • 打赏
  • 举报
回复
like是全文检索啊,快不了。
cattycat 2012-03-12
  • 打赏
  • 举报
回复
A表才1万条,全部加到内存中吧;然后B更新的时候更新一下A中的数据,并保持和库的同步。
warlock 2012-03-10
  • 打赏
  • 举报
回复
你这自检程序就只能增加数据库的压力;一但数据量上来了,后果将会很严重。

只有从自检程序入手才能有效的解决问题。你的自检程序可以定时运行,比如每天晚上0点运行;统计前一天的数据的增加,删除情况,然后更新数量。这样比你一次like数10万的数据要快很多。

只是个建议。。。

很多时候,一个好的设计就可以减轻服务器很大的压力。
喊我满哥 2012-03-09
  • 打赏
  • 举报
回复
LZ可以搜索下instr函数与like的。数据量越大,提升越明显
我在大数据量模糊查询的时候就是用的instr函数
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 gohome520 的回复:]

反过来呢,不是A表查B表,而是B表添加的时候,去更新A表。

呵呵,不太懂,随意发表一下自己的想法哈。
[/Quote]

这样不太好。
A表更新频率是大约几天会才会有新增或删减。
B表是每1分钟内就会有数个更新或者删减。
如果B表每隔1分钟就刷新A表数次,那样会很占服务器CPU的。

gohome520 2012-03-07
  • 打赏
  • 举报
回复
反过来呢,不是A表查B表,而是B表添加的时候,去更新A表。

呵呵,不太懂,随意发表一下自己的想法哈。
giszinc 2012-03-07
  • 打赏
  • 举报
回复
like "%WD%" 中的WD是不是固定值,如果是的话试一下instr函数索引。
ke5315309 2012-03-06
  • 打赏
  • 举报
回复
count 111
ACMAIN_CHM 2012-03-02
  • 打赏
  • 举报
回复
关键是这个`content` LIKE '%$wd%' 根本无法使用索引,也就是说,每次查询,都需要把表中的所有记录都遍历一遍。
珠海-天堂 2012-03-02
  • 打赏
  • 举报
回复
索引会占用空间,因为它需要把索引文件存在磁盘上呀。但是会加快查询速度。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wwwwa 的回复:]

%$wd%:无法用到索引
content id上建立索引没有
[/Quote]

表A字段id设置的是主键,自动递增。索引未设置,唯一未设置。
表B字段content,类型text。主键未设置、索引未设置、唯一未设置。

因为B表每天的数据是以1万递增的,每天递增的数据大小是20MB左右。
如果设置表B的字段content为【索引】会不会很占空间影响查询速度?而且好像有一个【全文检索】的设置的,这个是不知道可否用上 如何用

WWWWA 2012-03-02
  • 打赏
  • 举报
回复
%$wd%:无法用到索引
content id上建立索引没有
oO寒枫Oo 2012-03-02
  • 打赏
  • 举报
回复
`content` LIKE '%$wd%'
这个比较难受 有索引的话也基本上很难会去走
iihero_ 2012-03-02
  • 打赏
  • 举报
回复
好像也没有多大的优化余地,全表扫描啊, 索引也用不上。
libo_sina 2012-03-02
  • 打赏
  • 举报
回复
"SELECT COUNT(*) FROM B WHERE `content` LIKE '%$wd%' " 无法利用到索引;优化下count(tid)吧

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧