Php 通过int查找记录通过varchar查找与通过varchar查找记录
我知道,通过索引(int)查找记录比通过名称(varchar)查找记录要快 案例1:通过索引查找记录(int)通过名称查找记录(varchar)Php 通过int查找记录通过varchar查找与通过varchar查找记录,php,mysql,Php,Mysql,我知道,通过索引(int)查找记录比通过名称(varchar)查找记录要快 案例1:通过索引查找记录(int)通过名称查找记录(varchar) 数据库 [names] idx(int) : index name(varchar) : name [records] idx(int) : record_idx name_idx(int) : name_index content(longtext) : content [names] idx(int) : index name(varchar
- 数据库
[names] idx(int) : index name(varchar) : name [records] idx(int) : record_idx name_idx(int) : name_index content(longtext) : content
[names] idx(int) : index name(varchar) : name [records] idx(int) : record_idx name_idx(int) : name_index name(varchar) : name content(longtext) : content
- 加工
案例1-1:使用变量records = SELECT * FROM `records` WHERE `name` in ('name1', 'name2', 'name3');
案例1-2:子查询results = SELECT `idx` FROM `names` WHERE `name` in ('name1', 'name2', 'name3'); records = SELECT * FROM `records` WHERE `name_idx` in (results); // results is just a variable in PHP // don't care of it
案例1-3:加入records = SELECT * FROM `records` WHERE `name_idx` in (SELECT `idx` FROM `names` WHERE `name` in ('name1', 'name2', 'name3'));
records = SELECT `records`.* FROM `records`, `names` WHERE `names`.`name` in ('name1', 'name2', 'name3') AND `names`.`idx` = `records`.`name_idx`;
- 数据库
[names] idx(int) : index name(varchar) : name [records] idx(int) : record_idx name_idx(int) : name_index content(longtext) : content
[names] idx(int) : index name(varchar) : name [records] idx(int) : record_idx name_idx(int) : name_index name(varchar) : name content(longtext) : content
- 加工
records = SELECT * FROM `records` WHERE `name` in ('name1', 'name2', 'name3');
哪种情况更快?首先,您可以使用评测检查查询性能。我已经测试了所有这些查询。第一个(案例1.1)是最差的,在子查询和联接之间,联接是更好的选择,虽然两者几乎相同,但联接更快更干净
我不清楚第二个案例。因为这里不使用两个表,当您只使用一个表时,它对小数据的性能会更好,对大数据会产生问题。使用
JOIN
怎么样?@genespos我添加了一个案例1-3。在这些情况下它是最快的吗?