Sql 当标志列为约束时,选择“查询速度慢”
我有一个相当简单的表,叫做widgets。每行包含一个id、一个描述和一个可见标志: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
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所能做的最好的方法。