我有这个陈述
input.on('click',function(){
console.log(array) // 2
});
这会比将唯一字段放在第一位慢吗?像这样;
SELECT * FROM table
where somenotuniquefield like '%\"$variable1\"%'
and primaryuniquefield = '$variable2' ";
似乎合乎逻辑的答案是肯定的,但在我完成并重新命令我的MySQL语句之前,我想确切地知道。
答案 0 :(得分:0)
在您的示例中,MySQL优化查询,它将首先使用主键搜索记录。
在查询前使用EXPLAIN
。这将为您提供有关搜索执行方式的一些信息。
另一种测试查询是否具有高效性的方法,您可以使用此查询:
SHOW STATUS LIKE 'last_query_cost'
(值越高,查询越多,#34;越贵。)
如果您需要更多数据,则可以启用性能分析:
SET profiling = 1
运行您的查询,然后显示结果:
SHOW PROFILE
在衡量效果时,请始终在单词SQL_NO_CACHE
后使用SELECT
,这样就不会使用内部缓存,这可能是不可取的。
答案 1 :(得分:0)
您不需要手动重新排序计划执行优化器已经为您执行的sql语句。
以你的方式工作。你有2个条件
第一个(像)没有可用的索引,你应该对表进行完整的扫描
第二个使用唯一索引,因此它只返回1或0行。具有比前一个更好的区别,所以mysql将使用此过滤器之前总是比之类的
订单无关紧要
根据建议您可以使用EXPLAIN命令检查它。
答案 2 :(得分:0)
正如其他消息指出的那样,SQL引擎/优化器将尝试最好地将可用索引应用于您的查询,我没有指出的一件事是组合索引...例如您(primaryUniqueField上的索引,someNotUniqueField)。通过在KEY字段上进行覆盖索引,将提供KNOW,这将有助于首先查询该有限集。
通过在索引中使用第二列(除非第一列已经聚簇并且已经按照实际顺序),然后查询也使用索引页面本身而不是其余部分的原始数据页面使用第二列整个记录数据都位于。仅当一条记录符合条件时,它才会返回到原始数据页以提取查询的其余列。