为表编制索引以进行高级搜索



假设我有一个表shapes表,其中包含类似的列

create table shapes (
id int,
region_id int,
clusted_id int,
color varcahr(60),
edges int,
x int, y int, z int,
orientation int,
created_at date,
updated_at date,
visible tinyint
...
);

我需要创建一个";高级搜索";查询此具有超过2M行的表的功能。用户可以根据所有可用列的混合匹配进行查询。类似的东西

select * from shapes where created_at between ? and ? and x+y < ? and region_id in (?, ?, ?) ...

可以有出现在where子句中的字段,也可以有不出现的字段。这就是";高级";搜索此外,没有任何内容是全文。假设所有内容都是int、date、boolean或enum。

  • 假设形状均匀分布在所有列的所有可能值中,对该表进行索引的最佳做法是什么
  • 我必须把表中所有字段的子集索引在一起吗
  • 是否有其他外部服务可以帮助提高性能?像弹性搜索

谢谢!

没有"好";解决方案

观察他们真正搜索的内容。然后制作几个索引,每个索引大约2列。制作复合索引时,请从使用=测试的内容开始。根据用户填写的表单字段构造查询。不要为x+y < ?等不可搜索的表达式编制索引。

更多:

http://mysql.rjweb.org/doc.php/eav
http://mysql.rjweb.org/doc.php/index_cookbook_mysql

最新更新