Mysql 在这种情况下,索引是否有效?

Mysql 在这种情况下,索引是否有效?,mysql,sql,indexing,Mysql,Sql,Indexing,我有一个表格:products,有以下列(productCode,productName,productDescription,quantityInStock,buyPrice,image) 例如,在执行以下查询时,productName上的索引是否有用从产品中选择*,其中productName=:productName?用于以下查询: SELECT * FROM products WHERE productName = :productName; 强烈建议在产品(productName)上建

我有一个表格:
products
,有以下列(
productCode
productName
productDescription
quantityInStock
buyPrice
image


例如,在执行以下查询时,
productName
上的索引是否有用<代码>从产品中选择*,其中productName=:productName?

用于以下查询:

SELECT *
FROM products
WHERE productName = :productName;

强烈建议在
产品(productName)
上建立索引。

对于此类查询:

SELECT *
FROM products
WHERE productName = :productName;

强烈建议在
产品(productName)
上建立索引。

对于该查询,最好的方法是为productName建立索引。 另外,我建议不要选择(*),而只选择实际需要的列

此外,如果您只需要选择几个列,或者只有一个列,您甚至可以考虑覆盖索引。

例如:

SELECT productName, buyPrice
FROM products
WHERE productName = 'test';
对于上面的查询,我将为产品(productName、buyPrice)添加一个索引。这将允许数据库使用索引来过滤和检索数据,这应该非常快

关于您在上述评论中提到的其他问题:

SELECT * FROM products ORDER BY buyPrice
在这种情况下,我会为产品(buyPrice)编制索引-无论您是按ASC还是按DESC订购,只要在查询中是一致的(order by中的所有列都是DESC或ASC)


此外,我将避免选择(*),也考虑在这些查询中添加限制(实际上您需要所有行吗?)

,您可以为该查询做的最好的事情是索引产品名称。 另外,我建议不要选择(*),而只选择实际需要的列

此外,如果您只需要选择几个列,或者只有一个列,您甚至可以考虑覆盖索引。

例如:

SELECT productName, buyPrice
FROM products
WHERE productName = 'test';
对于上面的查询,我将为产品(productName、buyPrice)添加一个索引。这将允许数据库使用索引来过滤和检索数据,这应该非常快

关于您在上述评论中提到的其他问题:

SELECT * FROM products ORDER BY buyPrice
在这种情况下,我会为产品(buyPrice)编制索引-无论您是按ASC还是按DESC订购,只要在查询中是一致的(order by中的所有列都是DESC或ASC)


此外,我将避免选择(*),并考虑在这些查询中添加限制(实际上,您需要所有行吗?)/> P>如何通过BuffelySudio<代码> >代码> >从产品订单中通过BuffelyDeS/<代码>从产品订单中查询<代码> Buffys<代码> >由于默认情况下ASC顺序排序索引,所以我认为这样做是有效率的。为什么不尝试看看发生了什么,您将不会通过添加、修改或删除来修改数据。indices@codeDragon . . . 新问题应以问题而不是评论的形式提出。如何将查询的

buyPrice
索引为
SELECT*FROM products ORDER BY buyPrice
SELECT*FROM products ORDER BY buyPrice DESC
?由于默认情况下ASC顺序排序索引,所以我认为这样做是有效率的。为什么不尝试看看发生了什么,您将不会通过添加、修改或删除来修改数据。indices@codeDragon . . . 新问题应该作为问题而不是评论提出。即使我需要所有列,我还是应该避免
SELECT(*)
,而是列出所有列吗?如果需要所有列,用显式列表替换SELECT()语句不会提高性能,但肯定会有助于避免错误。例如,如果您在代码中依赖于从查询中收到5列结果,一年后又向表中添加了2列,会发生什么情况?如果显式声明列名,则不会更改任何内容。如果使用SELECT(),您会突然得到这两列(代码未使用),可能会发生不好的事情。如果上面的答案帮助了你,请考虑接受它作为问题的答案:“即使我需要所有的列,仍然应该避免<代码>选择(*)< /代码>并列出所有的列吗?如果你需要所有的列,用一个显式列表替换Stand()语句不会提高性能,但肯定会有助于避免错误。例如,如果您在代码中依赖于从查询中收到5列结果,一年后又向表中添加了2列,会发生什么情况?如果显式声明列名,则不会更改任何内容。如果使用SELECT(),您会突然得到这两列(代码未使用),可能会发生不好的事情。如果上面的答案帮助了你,请考虑接受它作为问题的答案: