Php 在包含30000条记录的mysql表中查找数据

Php 在包含30000条记录的mysql表中查找数据,php,mysql,database,Php,Mysql,Database,我使用PHP和MySQL运行Apache服务器 我想做一个简单的搜索引擎,查找包含特定字符串的文章 我有30000份文件,分页(我的意思是,总共30000份文件) 我认为有两种方法可以完成这项任务 向表中插入30000条记录(行)。然后mysql\u query查找包含查询字符串的记录 插入30条记录(行),每条记录1000条。然后mysql\u query查找包含查询字符串的记录,然后PHPexplode分离文章 哪一个更快 我将使用Select*from mytable,其中的内容文本类似于

我使用PHP和MySQL运行Apache服务器

我想做一个简单的搜索引擎,查找包含特定字符串的文章

我有30000份文件,分页(我的意思是,总共30000份文件)

我认为有两种方法可以完成这项任务

  • 向表中插入30000条记录(行)。然后
    mysql\u query
    查找包含查询字符串的记录

  • 插入30条记录(行),每条记录1000条。然后
    mysql\u query
    查找包含查询字符串的记录,然后PHP
    explode
    分离文章

  • 哪一个更快

    我将使用
    Select*from mytable,其中的内容文本类似于“%querystring%”

    主要的概念是

  • 在30000个文档中使用带有%通配符的
    mysql\u查询

  • 在30个文档中使用带有%通配符的
    mysql\u查询
    ,然后使用PHP
    explode
    strpos
    再次搜索

  • 谢谢


    更多详情:

  • 第一个概念->插入每个完整记录

    第1行:filename=aaaa1.doc,content=stack overflow是

    第2行:filename=aaaa2.doc,content=stack exchange是

    第3行:filename=bb1.doc,content=播放音乐

    第4行:filename=bb2.doc,content=咖啡和蛋糕

  • 第二个概念->使用groupping插入记录,假设没有令牌扭曲

    第1行:filename=aaaa,content=stack overflow是|-token-| stack exchange是

    第2行:filename=bbbb,content=播放音乐|-token-|咖啡和蛋糕|-token-|

  • 在大多数情况下,将30000条记录(行)放到表中会更快。此外,如果您有30000个文件/记录,将它们合并到较少的行中会违反正常表单,并且违反正常表单通常会在速度、一致性和可维护性方面受到惩罚。您还可以预期,像MySQL这样的DBMS不会像“%querystring%”那样为每一行解释
    ,而是及时编译它,这意味着查询将非常快

    原因很简单,如果MySQL匹配字符串,那么字符串将直接匹配。如果在PHP上对来自MySQL的数据执行字符串匹配,则首先必须通过SQL接口将其从MySQL复制到PHP

    根据您所搜索的内容,您可能需要考虑计算机语言算法,不仅可以找到匹配的行,而且还可以进行定性匹配。 编辑(因为问题编辑):实际上应该有两到三个表。一个列出所有文档的表。一个表,用于映射文档中的页面。和一个列出页面内容的表。页面内容和文档映射可以合并到同一个表中。像这样:

    创建表文档(
    id主键自动递增,
    名称VARCHAR(255)
    );
    创建表页(
    id主键自动递增,
    documentId内部引用(Documents.id),
    文本文本,
    外键(文档id)引用文档(id))
    );
    
    然后执行如下查询:

    从文档中选择Documents.name、Pages.text、Documents.id=Pages.documentId的页面以及类似“%querystring%”的文本;
    
    不妨看看“全文搜索引擎”。其中一些与mysql配合使用。不要使用
    mysql\u query
    -或任何这类函数。它们已被弃用,将从PHP的下一个主要版本中删除。如果我像您所说的那样将表分成两部分,那么如何查询以获取
    文本='%querytext%'
    文档。category='normal'
    ?还有一个问题,引用是md5哈希,而不是整数。(例如Documents.uniquehash和Pages.referencehash匹配,而不是Documents.id和Pages.documentId)您可以完全按照编写方式查询它:
    SELECT。。。其中Pages.text='%querytext'和Documents.category='normal'
    。“引用是md5哈希”是什么意思?数据库中的引用由您定义。