【问题标题】:Search performance mysql搜索性能 mysql
【发布时间】:2019-07-31 23:58:07
【问题描述】:

作为确认,什么是最好的 mysql 搜索引擎?搜索单词或数字?

让我们想象一个学生数据库。应该有一个学生表,另一个用于班级,另一个用于注册(这会将学生与具有唯一 ID 的班级相关联)还是只拥有一个包含所有学生数据和班级名称的表格注册?

只考虑性能,不用担心结构和其他任何事情,一旦所有过程都成为我安装在计算机上的软件,可以与服务器同步所有内容。

关键是要创建一个包含数千个注册的日志,并将其放在一个系统中,该系统能够对班级、学生进行分组、搜索、制作图表和一切。我关心的是 php 开始查询所有数据时的 mysql 性能。

什么会更好?使用 ID 搜索数千行并进行内部连接,或者使用名称和字符串搜索数千行 最好的问候

【问题讨论】:

  • “什么会更好?” 简单回答好的数据库设计 (normalization) 和索引然后 MySQL 可以处理数百万或数十亿条记录的连接就好了,数千是不是很多,所以不用担心性能。
  • 你真的在这里问了很多事情。对于第一点,规范化之一,最佳实践要求您规范化您的数据库。大多数时候,与一组表示相同数据的规范化表相比,拥有一个单一的整体表是不好的。至于优化查询,那完全是另一回事。
  • @RaymondNijland 实际上是这样。我遇到了问题,因为学生的名字和班级的名字很大。该表目前有 40 万条记录,全部为字符串,没有 thirths 表或内部连接

标签: mysql performance search


【解决方案1】:

简单回答:

尽可能避免未引用的文本字段,同时根据数据库的用途(仓库或生产)进行良好的索引测量,并尽可能地强制执行 3NF...不建议低于 3NF如果您不确定这意味着什么,而高于 3NF 可能对您(人类)来说过于复杂,无法始终掌握。

【讨论】:

  • 为了更好地澄清:让 DBMS 使用数字(最好是整数)而不是其他任何东西被高度认为是一种好的做法。如果并且当您需要查询搜索文本列时,请尽量避免使用可变长度的列。此外,搜索文本的查询应避免使用模式。 (= 是目前最快的运算符)
【解决方案2】:

数字和字符串之间的性能差异很小。性能的主要组成部分是需要触摸多少行。另一个查询的开销也很昂贵。

所以,这是低效的:

SELECT id  FROM students  WHERE name...             -- grab a bunch of ids
SELECT ... FROM foo  WHERE student_id IN (...) ...  -- then use them

这更好,即使它在逻辑上做同样的事情:

SELECT ...
    FROM students
    JOIN foo  ON foo.student_id = students.id
    WHERE name ...

【讨论】:

    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多