我知道,通过index(int)查找记录比通过名称(varchar)查找记录要快。
数据库
[names]
idx(int) : index
name(varchar) : name
[records]
idx(int) : record_idx
name_idx(int) : name_index
content(longtext) : content
处理
案例1-1:使用变量
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-2:子查询
records = SELECT * FROM `records` WHERE `name_idx` in
(SELECT `idx` FROM `names` WHERE `name` in ('name1', 'name2', 'name3'));
案例1-3:加入
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
name(varchar) : name
content(longtext) : content
处理
records = SELECT * FROM `records` WHERE `name` in ('name1', 'name2', 'name3');
哪种情况更快?
答案 0 :(得分:0)
首先,您可以使用性能分析检查查询性能。我已经测试了所有这些查询。第一个(案例1.1)是最差的一个,在子查询和加入,加入是更好的选择,虽然两者几乎相同,但加入更快更清洁。
我不清楚第二种情况。因为在这里你没有使用两个表,当你只使用一个表时,它对小数据和表的性能会更好。为大数据创建问题。