【问题标题】:SQL How to make inner join query from sentences table to itself using linking tableSQL如何使用链接表从句子表到自身进行内部连接查询
【发布时间】:2022-11-12 02:41:12
【问题描述】:

我有 2 张桌子

sentences 
-----------
id | lang | sentence 
links 
-------------
sentence_id | translation_id

我试图做这样的事情

SELECT * 
FROM sentences_unicode AS s
INNER JOIN links AS l ON l.sentence_id = s.id
INNER JOIN sentences_unicode AS t ON l.translation_id = t.id
WHERE s.lang = 'pol' AND s.sentence LIKE "%pasek%"

但这不起作用。我认为这是正确的,但这似乎超时了。也许是因为有几百万个句子。有没有其他方法可以获得 给定搜索条件的句子及其翻译?

MySQL 说:文档

#2006 - MySQL 服务器已经消失

mysql> DESCRIBE links;
+----------------+---------+------+-----+---------+-------+
| Field          | Type    | Null | Key | Default | Extra |
+----------------+---------+------+-----+---------+-------+
| sentence_id    | int(11) | NO   |     | NULL    |       |
| translation_id | int(11) | NO   |     | NULL    |       |


mysql> DESCRIBE sentences_unicode;
+----------+----------------+------+-----+---------+-------+
| Field    | Type           | Null | Key | Default | Extra |
+----------+----------------+------+-----+---------+-------+
| id       | int(11)        | NO   |     | NULL    |       |
| lang     | varchar(3)     | NO   |     | NULL    |       |
| sentence | varchar(15000) | NO   |     | NULL    |       |
+----------+----------------+------+-----+---------+-------+
3 rows in set (0.02 sec)

【问题讨论】:

  • 发布表定义,以便我们可以看到索引、引擎和排序规则

标签: mysql sql inner-join


【解决方案1】:

如果您的查询超时,这不是语法错误,而是性能问题。

就像'%search%' 一样,它是最慢的!如果您在sentence 列上有索引,搜索LIKE 'pasek%' 会更快,但不会在字符串内搜索,只会搜索以pasek 开头的字符串。

您可以通过在sentence 列上创建FULLTEXT index 来进行优化。

https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html

SELECT * 
FROM sentences_unicode AS s
INNER JOIN links AS l ON l.sentence_id = s.id
INNER JOIN sentences_unicode AS t ON l.translation_id = t.id
WHERE s.lang = 'pol' AND MATCH (a) AGAINST ('pasek') IN NATURAL LANGUAGE MODE

在 5.6.4 之前的版本中,Full Text search 仅在 MyISAM 表上可用。随着 MyISAM 的全面淘汰,自 MySQL 5.6.4 起,InnoDB 全文搜索 (FTS) 终于可用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2019-08-18
    • 2017-10-23
    • 2014-12-16
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多