[SQL] 请问这种字段超多的数据表应该怎么检索全部字段 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
12tall
V2EX    程序员

[SQL] 请问这种字段超多的数据表应该怎么检索全部字段

  •  
  •   12tall 2020-12-10 10:00:05 +08:00 2343 次点击
    这是一个创建于 1768 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟对数据库仅用过简单的增删改查。昨天同事提了个想法,有点懵逼。求各位大佬指点迷津

    需求:

    1. 数据表中的字段比较多,大概有 70 多个,主要用于存放一些实验数据(不只是数值);
    2. 用户想使用自然语言(英文) 在所有字段中检索;
    3. 数据表可能会经常增加字段;
    4. 字段太多,在 Web 端显示不开

    思路与疑惑

    1. 在全部字段中进行模糊查询?
      • 英文可以利用空格来分词;
      • 百度得知可以使用MySQLCONCAT() 函数来拼接字段;
      • where 后面的检索条件应该通过遍历用户输入来拼接,所以需要限制用户输入长度;
      • 需不需要用到视图,数据表更新后还需要手动更新视图?
    2. 怎么对查询结果进行相关性的排序?
      • 目前能想到的就只有利用case...when... 计数。
    3. Web 端显示
      • 目前利用vue + element 可以实现用户自定义显示 /隐藏列。

    烦请各位大佬给点意见,或者可以参考(白嫖)的项目,谢谢!

    14 条回复    2020-12-11 09:27:54 +08:00
    l00t
        1
    l00t  
       2020-12-10 10:09:52 +08:00   1
    不知道你在说什么…… 你这列的“需求”,完全不清晰。像“4.", 这甚至不是需求。

    使用自然语言在所有字段中检索?这是个怎样的场景?

    “相关性排序”又是个什么东西?
    ztxcccc
        2
    ztxcccc  
       2020-12-10 10:13:58 +08:00   1
    上搜索引擎,Apache Solr
    l00t
        3
    l00t  
       2020-12-10 10:14:02 +08:00   1
    不考虑那些不清楚的内容,单说字段可能经常增加这点,使用传统关系型数据库的话,一般可以用纵表形式。字段是一条记录,而不是真的表字段。而建的表可以是 ID, 字段名,字段值 这样的形式。

    不过如果综合你别的需求来考虑的话,那整个模型就未必合适。
    12tall
        4
    12tall  
    OP
       2020-12-10 10:21:33 +08:00
    @l00t 非常感谢
    `4.` 的话是做网页的时候遇到的一个比较头疼的问题,跟 SQL 无关

    我理解的检索是:用户输入一组关键词,去匹配数据表中的所有字段,返回包含全部或几个关键词的记录行
    如果某一行包含所有用户输入的关键词,那么它就要被优先显示
    12tall
        5
    12tall  
    OP
       2020-12-10 10:24:04 +08:00
    @ztxcccc 谢谢,去百度一下
    l00t
        6
    l00t  
       2020-12-10 10:28:04 +08:00   1
    @12tall #4 这种检索方式就不要用 mysql 了,用 elastic search 之类的吧。
    12tall
        7
    12tall  
    OP
       2020-12-10 10:31:13 +08:00
    @l00t 哇,非常感谢大佬的推荐。谢谢!
    dfzj
        8
    dfzj  
       2020-12-10 15:02:17 +08:00   1
    给这个结构化数据库对应建立一张资源索引表:
    CEATE TABLE table1 (id
    , content TEXT -- 把所有字段内容放入该字段中
    , srcId -- 源表 ID)

    然后界面上用户输入 关键词,去查出 table1.conent, 得到 srcId, 最终找到目标
    12tall
        9
    12tall  
    OP
       2020-12-10 15:25:59 +08:00
    @dfzj 谢谢,请问这个和视图、或者传说中的倒排索引是不是很像呢
    dfzj
        10
    dfzj  
       2020-12-10 15:32:21 +08:00
    @12tall 有点那种意思,但还差的远。倒排索引还得把所有字段内容先做分词,然后按照词来排
    imn1
        11
    imn1  
       2020-12-10 15:46:16 +08:00   1
    2. google "SQL 全文检索"
    3. 考虑 NOSQL,或者 sql+json
    whx20202
        12
    whx20202  
       2020-12-10 16:01:13 +08:00   1
    1. 用一个同步工具(订阅 binlog 那种)同步到 elastic search 里。
    2. 用 es 查询
    shuax
        13
    shuax  
       2020-12-10 16:43:46 +08:00   1
    改用 es
    wakzz
        14
    wakzz  
       2020-12-11 09:27:54 +08:00   1
    你这个需求不建议使用 mysql,建议将 mysql 的数据实时同步到 es 后,通过 es 来查询
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1099 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:55 PVG 01:55 LAX 10:55 JFK 13:55
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86