MySQL-索引会加速我的搜索查询吗?

MySQL-索引会加速我的搜索查询吗?,mysql,algorithm,search,indexing,Mysql,Algorithm,Search,Indexing,我在医院里有一张病人的桌子,所以随着时间的推移,这个桌子可能会包含数万行。为每个患者分配一个医院唯一ID号(BIGINT),作为主键,其余列为VARCHAR或CHAR,以及一个日期列。据我所知,主键是自动索引的,因此按患者ID搜索是最佳选择(?) 可以通过单个字段或此ID、姓名、地址、出生日期等的组合来搜索患者。我可以通过在每个字段上创建索引来优化搜索吗?当在这些索引字段的组合上执行搜索时,这种优化是否也有效 SELECT * FROM patients WHERE first_name="J

我在医院里有一张病人的桌子,所以随着时间的推移,这个桌子可能会包含数万行。为每个患者分配一个医院唯一ID号(BIGINT),作为主键,其余列为VARCHAR或CHAR,以及一个日期列。据我所知,主键是自动索引的,因此按患者ID搜索是最佳选择(?)

可以通过单个字段或此ID、姓名、地址、出生日期等的组合来搜索患者。我可以通过在每个字段上创建索引来优化搜索吗?当在这些索引字段的组合上执行搜索时,这种优化是否也有效

 SELECT * FROM patients WHERE first_name="John" AND address="blah blah blah";

此外,我认为MySQL使用自己的内部算法进行搜索,可能是二进制搜索,用户无法从MySQL文档中选择或实现自己的?

,这是一本非常有趣的读物:

假设发出以下SELECT语句:

mysql>从tbl_名称中选择*,其中col1=val1和col2=val2

如果col1和col2上存在多列索引,则相应的行 可以直接提取。如果上存在单独的单列索引 col1和col2,优化器将尝试使用索引合并 优化(参见


为所有用于搜索的列组合创建单列和多列索引会有缺点吗?例如,我可以在first_name上创建一个索引,在address上创建一个单独的索引,在first_name和address上创建另一个索引,等等……索引占用空间。为什么不试试看是否喜欢。您可以删除它索引也一样,如果它们没有帮助的话。