Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过int查找记录通过varchar查找与通过varchar查找记录_Php_Mysql - Fatal编程技术网

Php 通过int查找记录通过varchar查找与通过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

我知道,通过索引(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) : 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:使用变量

    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
    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。在这些情况下它是最快的吗?