Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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/0/asp.net-core/3.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
Sql 当标志列为约束时,选择“查询速度慢”_Sql_Mysql - Fatal编程技术网

Sql 当标志列为约束时,选择“查询速度慢”

Sql 当标志列为约束时,选择“查询速度慢”,sql,mysql,Sql,Mysql,我有一个相当简单的表,叫做widgets。每行包含一个id、一个描述和一个可见标志: CREATE TABLE `widgets` ( `id` int auto_increment primary key, `description` varchar(255), `is_visible` tinyint(1) default 1 ); 我想发出一个查询,选择可见小部件子集的描述。以下简单查询实现了n和m为整数的技巧: SELECT `description` F

我有一个相当简单的表,叫做widgets。每行包含一个id、一个描述和一个可见标志:

CREATE TABLE `widgets` (
  `id` int auto_increment primary key, 
  `description` varchar(255), 
  `is_visible` tinyint(1) default 1
);
我想发出一个查询,选择可见小部件子集的描述。以下简单查询实现了n和m为整数的技巧:

  SELECT `description` 
    FROM `widgets` 
   WHERE (`is_visible`) 
ORDER BY `id` DESC 
   LIMIT n, m;
不幸的是,正如所写的,这个查询必须扫描至少n+m行。有没有办法让这个查询扫描更少的行,或者通过修改查询或者修改模式

有没有办法让这个查询扫描更少的行

不,不是真的。考虑到它是一个二进制标志,在该字段上创建索引不会给您带来太多好处

鉴于否决票,我将详细说明

您必须考虑索引的唯一值的基数。从MySQL手册:

基数越高,MySQL在进行连接时使用索引的可能性就越大

在这个领域将是2。没有比这低多少

另见:

有没有办法让这个查询扫描更少的行

不,不是真的。考虑到它是一个二进制标志,在该字段上创建索引不会给您带来太多好处

鉴于否决票,我将详细说明

您必须考虑索引的唯一值的基数。从MySQL手册:

基数越高,MySQL在进行连接时使用索引的可能性就越大

在这个领域将是2。没有比这低多少

另见:

使用索引可获得更快的查询结果:

ALTER TABLE `widgets` ADD INDEX ( `is_visible` ) 

使用索引以获得更快的查询结果:

ALTER TABLE `widgets` ADD INDEX ( `is_visible` ) 

由于表具有可变长度记录,您可以从索引中受益。由于表具有可变长度记录,您可以从索引中受益。索引有帮助,但MySQL仍然需要扫描n+m行。我想知道是否有一种方法可以让MySQL扫描更少的行(理想情况下是m行),但显然考虑到限制的实现方式,n+m是MySQL可以做的最好的方法。索引有帮助,但MySQL仍然需要扫描n+m行。我想知道是否有一种方法可以让MySQL扫描更少的行(理想情况下是m行),但显然,考虑到实现限制的方式,n+m是MySQL所能做的最好的方法。