繁体   English   中英

如何为模块化搜索优化MySQL索引/查询?

[英]How to optimize MySQL indexes/query for modular search?

我有一个很大的MyISAM表,其中包含约200,000,000行数据,这些数据表示可以通过Web UI进行搜索的事件。 UI是“高级搜索”类别的页面,因此用户可以输入可搜索字段的任意组合的搜索条件。

表结构的简化版本是这样的:

events
event_id, event_code, place_id, person_id, date, type

people
person_id, person_name

并且允许用户使用必需的类型,可选的日期范围以及零个或多个event_codes,place_ids和/或person_names进行搜索。

为了针对这种类型的搜索优化表,除了不包含类型的列之外,我是否需要在每个列排列上都有索引? 还是有一种更有效的方式索引表。

当前,该表具有一个主要索引,该索引涵盖event_code,place_id,person_id,日期和类型,因此,当您使用所有字段进行搜索时,响应是可接受的。 但是,如果尝试仅使用日期范围进行搜索,则查询基本上不会返回。

MySQL使用从第一个字段到最后一个字段的索引,因此,如果您未在索引中使用较早的字段,则将不使用该索引(如您在日期中观察到的)。

我不一定要说每个排列都需要一个索引,但至少需要几个。 既然您已经声明了类型是必需的,那么我将从该索引开始,并创建一个相对较小的两个字段索引初始集,其他每个可搜索字段都作为第二个字段。

同样重要的是如何形成实际的搜索条件。 如果您正在对诸如DAYOFWEEK(date)类的索引字段进行操作,则没有任何索引量会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM