通过varchar找到的int查找记录VS通过varchar查找记录

时间:2015-11-27 15:32:19

标签: php mysql

我知道,通过index(int)查找记录比通过名称(varchar)查找记录要快。

案例1:通过名称(varchar)找到的索引(int)查找记录

  • 数据库

    [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`;
    

案例2:通过名称(varchar)查找记录

  • 数据库

    [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 个答案:

答案 0 :(得分:0)

首先,您可以使用性能分析检查查询性能。我已经测试了所有这些查询。第一个(案例1.1)是最差的一个,在子查询和加入,加入是更好的选择,虽然两者几乎相同,但加入更快更清洁。

我不清楚第二种情况。因为在这里你没有使用两个表,当你只使用一个表时,它对小数据和表的性能会更好。为大数据创建问题。