表结构
id  kws  reply
1   abc  123 
2   abc  1234
3   cba  321
4   bca  321我使用
$sql->SetQuery("SELECT * FROM `reply` where kws like '%abc%' order by id DESC ");
$sql->Execute('L');
while($row=$sql->GetArray('L'))
{
  处理
}
输出所有有关abc的reply
如果数据量非常大估计100万
那会不会降低速度
有没好的例子代码?
和表的结构?

解决方案 »

  1.   

    %%形式的like很慢的,可以考虑用全文索引
      

  2.   

    我修正下 我不用like 的 %% 搞错了
      

  3.   

    具体语句具体分析,先仔细阅读mysql文档的'优化'部分,很多章节的,再结合explian结果分析,到了极限再google查找相关资料.自己动手,丰衣足食.
      

  4.   

    如果不用like那就用=,应该是可以的.在表上建立索引
      

  5.   

    用LIKE会很慢的,而且如果应用了LIKE模糊查询也没办法使用索引的,也就是说即使你建立了索引,但是你使用LIKE模糊查询的话,索引也是没有用处的。
    建议用数据冗余的方法解决问题。
      

  6.   

    我建立了主键 
    如果不用like 有没别的方法读取出来
      

  7.   


    我不使用like的模糊搜索!我二楼说了...仅仅的使用like '值'
      

  8.   

    如果没有猜错的话,应该是类似留言板回复,或者是评论回复之类的东西。冗余的话数据量反而会增加
    给你一种表结构把
    留言ID 用户ID 内容 被回复ID(本表的留言ID)
    这个表的被回复ID我习惯称为父ID,父ID为被回复的ID号
      

  9.   

    恩  如果我现在要列出所有关键词为你好的回复
    不用like 还有什么办法速度快 利用索引如果用like 我也不使用like的模糊搜索这样如何呢?
      

  10.   

    那为什么还用like,直接 = '值'就好了,你现在的问题是如何优化order by,也就是explain你的语句得到的结果,Extra列不应该有Using filesort . 基本你的语句类似这样的话就应该建立个联合索引(kws,id).假设数据不断添加,你要考虑分区或者分表方案。
      

  11.   

    嗯,遇到问题可以多翻翻文档
     
    %
     匹配任何数目的字符,甚至包括零字符  
     
    _
     只能匹配一种字符 
     mysql> SELECT 'David!' LIKE 'David_';        -> 1mysql> SELECT 'David!' LIKE '%D%v%';        -> 1
    你如果是 SELECT * FROM `reply` where kws like 'abc'
    那么不是就等于SELECT * FROM `reply` where kws='abc' 吗?不加通配符,还要like做什么呢?
    PS:like '%abc%'不能使用索引,like 'abc%'可以
      

  12.   

    我现在数据库有20W数据
    建立了主键
    然后where kws='你好'用时 0.04s
    如果是3000条是 0.003s20W开始减速...