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 中使用的任何其他列执行相同的操作。