我有一张医院病人的桌子,因此随着时间的推移,这张桌子可能会包含数万行。医院唯一ID号(BIGINT)分配给每个患者,其作为PRIMARY KEY,其余列为VARCHAR或CHAR,以及单个DATE列。据我所知,PRIMARY KEYS会自动编入索引,因此根据患者的ID进行搜索是最佳的(?)。
可以通过单个字段或此ID,姓名,地址,出生日期等组合搜索患者。我可以通过在每个字段上创建INDEX来优化搜索吗?当对这些INDEXed字段的组合执行搜索时,此优化也会起作用,例如
SELECT * FROM patients WHERE first_name="John" AND address="blah blah blah";
???
另外,我认为MySQL使用自己的内部算法进行搜索,也许二元搜索,用户无法选择或实现自己的算法?
答案 0 :(得分:0)
来自MySQL文档http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html,这是一个非常有趣的阅读:
假设您发出以下SELECT语句:
的MySQL> SELECT * FROM tbl_name WHERE col1 = val1 AND col2 = val2;
如果col1和col2上存在多列索引,则为相应的行 可以直接获取。如果存在单独的单列索引 col1和col2,优化器将尝试使用索引合并 优化(见