假设我有一个表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