V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tianxiacangshen
V2EX  ›  程序员

PHP 最简单的提升查询速度的方法

  •  1
     
  •   tianxiacangshen · 2018-04-25 09:04:47 +08:00 · 5197 次点击
    这是一个创建于 2390 天前的主题,其中的信息可能已经有所发展或是发生改变。
    PHP 技能: 大概三分之一桶水

    目前 web 环境还是用的 windows 2008 IIS7+ PHP+mysql

    如今遇到在数百万记录中 like %{$word}%的查询,这个速度就已经卡成翔,更不用说如果{$word}包含多个词组然后分拆的查询了

    请问高手们,怎么办?
    46 条回复    2018-04-26 13:01:33 +08:00
    90safe
        1
    90safe  
       2018-04-25 09:08:03 +08:00
    这不是应该数据库的问题吗,索引优化啥的,换 nosql 啥的
    Reign
        2
    Reign  
       2018-04-25 09:14:42 +08:00
    1. match against
    2. 换 elasticsearch
    iamsee
        3
    iamsee  
       2018-04-25 09:24:18 +08:00
    es
    GoPHP
        4
    GoPHP  
       2018-04-25 09:24:34 +08:00
    你应该知道 like '%$word%' 这种写法不会用到索引的,'$word%' 后面写一个%号还可以用到索引。其实这都不是好的解决方法,最好的方法是全文索引,以前喜欢用 sphinx,现在基本上都是用 es 了
    Vogan
        5
    Vogan  
       2018-04-25 09:24:59 +08:00
    不要在 mysql 中做%like%查询
    zgx030030
        6
    zgx030030  
       2018-04-25 09:26:36 +08:00
    全文索引 sphinx php 又一次成功背锅
    nullen
        7
    nullen  
       2018-04-25 09:29:33 +08:00
    跟 PHP 有个蛋关系。
    zhs227
        8
    zhs227  
       2018-04-25 09:31:12 +08:00
    可以用 sphinx,配套 mysql 比较靠谱。不是 PHP 的锅
    dobelee
        9
    dobelee  
       2018-04-25 09:32:14 +08:00 via Android
    最近黑 php 的这么多吗。。。
    xmbaozi
        10
    xmbaozi  
       2018-04-25 09:34:18 +08:00
    关 php 什么事。
    上 elasticsearch
    或 mysql 全文搜索(没用过)
    onepunch
        11
    onepunch  
       2018-04-25 09:40:38 +08:00
    数据量大到一定程度跟语言没有关系,你上 c 语言来查也慢

    你说的这个问题分库分表解决不了吗?
    patx
        12
    patx  
       2018-04-25 09:44:09 +08:00 via Android
    上全文搜索
    nineyang1
        13
    nineyang1  
       2018-04-25 09:50:07 +08:00
    高级黑
    asen477
        14
    asen477  
       2018-04-25 09:53:45 +08:00
    mysql 做全文索引,分表分库去做视图等
    linxl
        15
    linxl  
       2018-04-25 10:01:25 +08:00
    php 日常被黑系列
    sdpfoue
        16
    sdpfoue  
       2018-04-25 10:11:05 +08:00
    低端黑
    akira
        17
    akira  
       2018-04-25 10:16:33 +08:00
    楼主你的数据库技能比 php 更弱啊,上全文搜索吧
    yimaneilicj
        18
    yimaneilicj  
       2018-04-25 10:21:35 +08:00
    学习了
    wangjhsir
        19
    wangjhsir  
       2018-04-25 10:34:09 +08:00 via iPhone
    上 es 吧
    you know,for search
    torbrowserbridge
        20
    torbrowserbridge  
       2018-04-25 10:45:02 +08:00
    标题党,我还以为你能让 PHP 执行速度提升呢
    vincenttone
        21
    vincenttone  
       2018-04-25 10:47:37 +08:00
    用不上索引,需要加分词系统了
    jrient
        22
    jrient  
       2018-04-25 10:54:50 +08:00
    垃圾 php 换 go 把 [doge][doge]
    tianxiacangshen
        23
    tianxiacangshen  
    OP
       2018-04-25 10:58:47 +08:00
    @zgx030030
    @nullen
    @nineyang1
    @linxl
    @sdpfoue
    @akira
    @jrient

    没有黑 PHP 啊,是我 PHP 和数据库都太弱了,sql 语句都是 PHP 框架构造的,有时候由于 PHP 不行语句没构造好,因此才归咎于自己的 PHP 不行
    soho176
        24
    soho176  
       2018-04-25 11:00:52 +08:00
    厉害了,做的啥站,数据这么多?采集来的数据?
    Mazexal
        25
    Mazexal  
       2018-04-25 11:12:55 +08:00
    上 solr
    enenaaa
        26
    enenaaa  
       2018-04-25 11:17:32 +08:00
    不想用其他工具的话, 就试试 mysql 的全文索引。
    g8287694
        27
    g8287694  
       2018-04-25 11:18:32 +08:00
    @tianxiacangshen 啥叫 php 不行语句没构造好
    你用 like 你随便给我来个上面语言速度快的看看
    nullen
        28
    nullen  
       2018-04-25 11:51:47 +08:00
    @tianxiacangshen 你先学学如何提问,如何比较好的表述自己的问题。
    chinvo
        29
    chinvo  
       2018-04-25 11:53:55 +08:00
    日常黑 PHP

    没研究过 elastic 就上 sphinx

    这种全文检索 mysql 不索引
    tianxiacangshen
        30
    tianxiacangshen  
    OP
       2018-04-25 11:56:17 +08:00
    @soho176

    网站久了,数据自然慢慢就多了,评论和回复数据达到百万了
    frozenway
        31
    frozenway  
       2018-04-25 11:57:58 +08:00
    <img src=" ">我之前问类似问题,都快被骂死了
    alexsunxl
        32
    alexsunxl  
       2018-04-25 12:04:59 +08:00
    上 es 全家桶, 写入和同步比较无痛
    然后读取从 es 里面读
    cy97cool
        33
    cy97cool  
       2018-04-25 12:24:29 +08:00 via Android
    求问如果就是要解决一个这种 like 查询的需求
    有没有封装好 elasticsearch 的软件 比如只要配置 mysql 连接信息 要建索引的表和列 然后就提供 api 供查询调用
    tianxiacangshen
        34
    tianxiacangshen  
    OP
       2018-04-25 12:46:58 +08:00
    @frozenway 没办法,技术太菜了,该骂
    simaguo
        35
    simaguo  
       2018-04-25 14:41:00 +08:00
    elasticsearch 了解下
    wekw
        36
    wekw  
       2018-04-25 14:46:06 +08:00
    数百万对于 MySQL 来说压力确实过大了
    SummerWQM
        37
    SummerWQM  
       2018-04-25 15:43:34 +08:00
    和我 PHP 有什么关系啊
    changwei
        38
    changwei  
       2018-04-25 15:49:00 +08:00 via Android
    我曾经搞过一个项目,sql server+c#的,不加索引,两千万行数据里面条件查询照样要查几分钟,明明是你用法不对,哪里是 php 和 mysql 的锅。
    sessionstop
        39
    sessionstop  
       2018-04-25 16:04:00 +08:00
    我笑了,php 是最好的语言好伐,这么容易招黑么。
    mingzu
        40
    mingzu  
       2018-04-25 18:41:02 +08:00
    ID 也很有意思啊。。。
    楼主南方人吗?

    天下苍身?
    cxbig
        41
    cxbig  
       2018-04-25 18:45:44 +08:00 via iPhone
    我们只在 debug 的时候用 like 这种命令……
    项目日常信息要上搜索引擎的 solr、sphinx、es 都行
    RorschachZZZ
        42
    RorschachZZZ  
       2018-04-25 18:49:29 +08:00
    like %aaa% 这样搞第一是确实慢。第二数据库容易炸。。。
    icy37785
        43
    icy37785  
       2018-04-25 19:52:41 +08:00 via iPhone
    PHP 前来背锅。。。这应该是数据库优化的问题。。。。跟 PHP 没关系呀。。。你标题如果是 sql 怎么提升查询速度,或许进来的人专业更对口。
    xttttt
        44
    xttttt  
       2018-04-25 22:54:19 +08:00
    这难道不是数据库的问题
    JohnShine
        45
    JohnShine  
       2018-04-26 09:55:19 +08:00
    ES
    ben1024
        46
    ben1024  
       2018-04-26 13:01:33 +08:00
    这语文水平,放弃 PHP 吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1949 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 00:33 · PVG 08:33 · LAX 16:33 · JFK 19:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.