全文索引与正常索引相结合

hil*_*ius 11 mysql sql database-design

在我的数据库中,我有一个包含companyId的表,指向公司,以及一些文本.我想做一个FULLTEXT搜索,但因为我总是向特定的公司发出请求.我想使用一个结合了我的companyId和全文索引的复合键.反正有吗?我猜这是不可能的,创建索引的最佳方法是什么,以便以下查询最快?

请求将永远是

SELECT * FROM textTable 
WHERE companyId = ? (Possibly more conditions) AND 
  MATCH(value) AGAINST("example")
Run Code Online (Sandbox Code Playgroud)

我应该正常在整数列上创建索引并添加一个全文索引吗?或者我应该value在索引中包含该列?也许两者?

小智 0

为什么你要选择一切?这对您的查询性能没有帮助。您必须仅选择您需要的列。这将减少扫描表所花费的时间。

对于全文搜索,您的方法将按相关性对结果进行排序,然后根据 WHERE 子句使用索引查找。因此,您需要通过在 SELECT 子句中添加索引查找来将其恢复为直接查找。

查询应该是这样的:

 SELECT 
    MATCH(value) AGAINST("example")
 FROM 
    textTable   
Run Code Online (Sandbox Code Playgroud)

您可以基于 WHERE 子句添加更多过滤,或者更好的是,如果您愿意,您可以涉及 IF 语句或 CASE 或任何其他函数。

像这样的东西:

 SELECT 
    IF(MATCH(value) AGAINST("example"), 'Your Returned value if TRUE', 'Your returned value if FALSE')
 FROM textTable
Run Code Online (Sandbox Code Playgroud)

这将进行全表扫描,而且速度更快。

对于索引部分,您可以在 companyId 上使用索引并包含值。您可以对 SELECT、WHERE 和 ORDER BY 中使用的任何其他列执行相同的操作。