- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有什么方法可以为这个查询创建一个功能索引并摆脱“filesort”吗?
SELECT id, title FROM recipes use index (topcat) where
(topcat='$cid' or topcat2='$cid' or topcat3='$cid')
and approved='1' ORDER BY id DESC limit 0,10;
我创建了索引“topcat”(列:topcat1+topcat2+topcat3+approved+id)但仍然显示“Using where; Using filesort”。
我可以再创建一个列,比方说,“all_topcats”将 topcat 编号存储在数组中 - 1,5,7,然后运行查询“... where $cid iIN (...)”。但问题是,在这种情况下,“all_topcats”列将是“varchar”,但“approved”和“id”列 - int,无论如何都不会使用索引。
有什么想法吗?谢谢。
最佳答案
如果重新排序索引中的列,您可能会提高该查询的性能:
approved, topcat1, topcat2, topcat3, id
了解表格的外观以及为什么将三列命名为这样会很有用。如果您有一个子表来存储 topcat 值,并带有返回主表的链接,那么组织一个好的查询可能会更容易,但是不知道为什么要这样设置它,很难知道这是否明智.
你能发布CREATE TABLE
吗?
你的 table 听起来设计得不太好。以下设计会更好:添加两个新表,Category
和 Category_Recipe
(交叉引用表)。 Category
将包含您的类别列表,Category_Recipe
将包含两列,一列是 Category
的外键,另一列是现有的外键配方
表。一行 Category_Recipe
是一个声明“这个食谱属于这个类别”。然后,您将能够非常简单地编写一个查询来搜索给定类别中的食谱。您还可以将食谱放入任意多个类别,而不是仅限于 3 个类别。查找“数据库规范化”和“外键”。
关于mysql - 使用 "OR"语句时Mysql索引出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4118229/
我是一名优秀的程序员,十分优秀!