MySQL:多类别产品的 SQL 和 DB

2024-01-07

我正在开发一个现在拥有数百万条记录的网站(抱歉,无法透露哪个网站)最初它只有几百条记录,因此下面的查询是可以接受的

查询: SELECT * FROM….WHERE 类别 LIKE ‘%,3,%’;

但现在它只是杀死数据库,因为对于每个查询,它都必须使用上述查询遍历整个 200 万条记录

类别表
身份证件名称
1 女
2 时尚
3 服装
4 配件
5 Top
6 连衣裙
7 耳环
8 短裙
9 长裙
10 男

产品表
ID…..类别….其他位
1 ,1,2,3,6,9,……
2 ,1,2,4,7,
3 ,1,2,3,5,
4 ,10,2,3,4,

你有上面发生的事情的图片。现在,如果我对产品表中的类别行进行全文索引,它只会给出 1 个基数:(

我怎样才能克服这个问题? 我考虑过为每个类别复制行,但数据库目前很大,有 2 GIG,如果有重复,它将变成大约 10 GIG……更像是一个问题,而不是一个解决方案


请记住,将数字存储为字符串每个数字所需的字节数大约是将数字存储为整数所需的字节数的两倍。再加上所有这些逗号。

因此,如果您担心空间,那么它不会像您担心的那样以标准化方式存储数据。

它将允许您编写利用索引的正确查询。因此,如果有一些扩展,您将用一点点存储空间来换取速度的大幅提高。

提示:如果您使用 InnoDB,主键不会消耗任何存储空间,因为表本身存储为主键索引。如果您需要优化按类别搜索,则应首先使用类别 ID 定义规范化表,然后使用产品 ID 定义规范化表。

CREATE TABLE CategoryProduct (
  categoryid INT,
  productid INT,
  PRIMARY KEY (categoryid, productid)
);

另请参阅我的回答在数据库列中存储分隔列表真的那么糟糕吗? https://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-bad了解使用逗号分隔列表的更多缺点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL:多类别产品的 SQL 和 DB 的相关文章

  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 使用 php 在多维数组中按键排序[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中对多维数组进行排序 https stackoverflow com questions 2059255 sorting multidimensional array in php 如何在
  • MySQL Connector/C++ 库链接错误问题

    PROBLEM 好吧 我一直在尝试遵循 MySQL Forge Wiki 和其他一些网站上的示例代码 这些网站提供了有关如何获得简单数据库连接的教程 但由于某种原因 我的项目总是因链接错误而失败 我可以我自己不明白为什么或如何解决它 我仍在
  • 第三个下拉菜单不从数据库填充

    我有以下 Index php
  • 通过 facebook graph API 检索 facebook 用户的邮政编码

    我正在尝试使用 facebook graph API 检索用户的邮政编码 我正在使用以下代码 代码在php ini中 facebook new Facebook array appId gt APP ID secret gt APP SEC
  • 使用先前的反向引用作为命名捕获组的名称

    有没有办法使用对先前捕获组的反向引用作为捕获组的名称命名捕获组 这可能不可能 如果不可能 那么这就是一个有效的答案 下列 data description some description preg match data matches p
  • 限制自己超载外部 API 的速率

    我发现了很多信息和脚本示例 展示了如何对 API 用户进行速率限制 但我无法找到任何示例来说明在施加这些限制时如何对您自己的 API 请求进行速率限制 我总是用诸如以下的代码来限制我的脚本sleep or usleep命令 但感觉这是一种低
  • InnoDB 因读未提交而死锁! - Java - Glassfish - EJB3(JPA/Hibernate)

    几天来 我在使用 Glassfish EJB3 和 Mysql InnoDB 的 Java 应用程序上遇到了死锁问题 配置 Mysql InnoDB Ver 14 12 Distrib 5 0 51a 适用于 debian linux gn
  • PHP Solr PECL 扩展安装

    我已经使用命令安装了 pecl solr pecl install solr 和梨使用 wget http pear php net go pear phar php go pear phar 重启Apache后 我仍然收到错误 Fatal
  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • phpunit测试调用其他需要mock的类方法的方法

    我正在尝试创建一个非常标准的单元测试 在其中调用一个方法并断言它的响应 但是我正在测试的方法调用同一类中的另一个方法 该方法做了一些繁重的工作 我想模拟该方法 但仍按原样执行我正在测试的方法 仅使用从调用另一种方法返回的模拟值 我简化了示例
  • MySQL MIN/MAX 所有行

    我有桌子Races与行ID Name and TotalCP 我选择分钟 TotalCP FROM Races 但是我想选择具有最小值的整行 我如何在单个查询中做到这一点 从聚合值获取整行的一般形式是 SELECT FROM Races W
  • Sonata DateTimePickerType 类默认日期显示错误的日期时间格式

    我陷入困境 我不知道如何使用 sonata DateTimePickerType 类正确设置默认日期和时间 我尝试了不同的方法 但到目前为止 没有一种方法没有帮助 在下面的截图中 help 键显示正确的日期和时间 但是当我使用 dp 默认日
  • 从数据库填充复选框

    我有两个表 第一个由与名称关联的 id 组成 1 汽车 2 火车 3 普通 ETC 第二个表由两个字段 user id 和第一个表中的 id 组成 例如 1 1 2 1 3 当用户转到该页面时 我试图重新填充选定的复选框 首先 您查询数据库
  • 使用 where 进行 select 语句时,HSQLDB 用户缺乏权限或未找到对象错误

    我的数据库使用 SQuirrel SQL 客户端版本 3 5 3 和 HSQLDB 我已经能够为其指定相应的驱动程序 内存中 并创建一个别名 我创建了一个表 CREATE TABLE ENTRY NAME VARCHAR 100 NOT N
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad
  • 使用 php-ews(Exchange Web 服务)在特定日期后获取电子邮件

    在我的 PHP 脚本中 我需要弄清楚如何检索指定消息 ID 之后或特定日期之后的所有电子邮件 两者都可以 我只需要检索自上次抓取收件箱以来的新电子邮件 这个收件箱每天收到数千封电子邮件 而且我在 30 天内无法删除任何电子邮件 对于初始导入
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中

随机推荐

  • 当选项卡处于非活动状态时,Chrome 扩展程序代码不再运行?

    我创建了一个非常简单的供个人使用的 Chrome 扩展程序 如果打开了特定网站的选项卡中的 DOM 元素发生更改 该扩展程序会向我发送浏览器通知 并将该选项卡切换为活动选项卡 如果选项卡未处于活动状态且未打开 预期 想要的行为 它会起作用
  • Greasemonkey脚本替代jQuery插件功能?

    我正在尝试为 Firefox 编写一个 Greasemonkey 脚本 以更改某些页面在检测到窗口失焦时的行为 我希望页面能够继续运行 就像它仍然处于焦点一样 即使我有另一个选项卡或窗口处于活动状态 我开始看CAPS 安全策略 https
  • 通过本地化对字符串列表进行排序

    我想根据用户区域设置对下面的字符串列表进行排序 List
  • 在 Bigquery 中参数化数据类型的目的是什么?

    在 BigQuery 中 您可以参数化某些数据类型 参考 https cloud google com bigquery docs reference standard sql data types parameterized data t
  • 在 WebKit.NET 上获取 HTTP 标头

    我一直在尝试弄清楚如何处理 401 响应WebKit NET并显示一个身份验证框 以便用户可以输入他的凭据 然后将其发送回服务器 This guy https github com therealmitchconnors webkitdot
  • SVG 中的路径放置在 D3 图表中圆圈的前面,无论附加顺序如何

    我的数据线应该放在behind但顽固地拒绝这样做 首先 我认为这与附加的顺序有关 但显然 事实并非如此 我了解到others https stackoverflow com questions 29282120 how can i get
  • 在 IIS 7 中运行 MVC3 应用程序时出现问题

    我在运行 Windows 7 Home 64 位的计算机上在 IIS7 中运行 MVC 3 项目时遇到问题 这就是我所做的 安装了 IIS 7 访问服务器并得到IIS欢迎页面 创建一个名为 d MySite 的目录并将 MVC 应用程序复制
  • 使用 Rails 4 Activerecord 将多个列计数合并到单个查询中

    Rails 4 1 Postgres 9 3 部署到 Heroku 我正在尝试减少对数据库的调用次数 我有一个大表 调查 有多个布尔列 例如role composer role performer 等等 控制器有多个查询 例如 sample
  • 如何在React JS中保留浏览器后退按钮上应用的过滤器

    在我的应用程序中 所有列表页面上都有过滤器 现在根据要求 我想在浏览器后退按钮上保留应用的过滤器 例如 假设用户已在销售列表页面上应用了过滤器 之后 他点击一条记录进入销售编辑页面 现在 如果用户点击浏览器后退按钮 那么那些应用的过滤器应该
  • 如何使用多字符分隔符分割字符串并维护分隔符

    使用 VB NET 我有一个字符串 RES00012 Some value RES00034 Another value 我想用 RES 作为分隔符 RES00012 Some value and RES00034 Another valu
  • Visual Studio 不要打开新的浏览器实例

    当我尝试在 Windows 10 上的 Visual Studio 2017RC 中运行 Web 应用程序时 它会打开一个新的浏览器实例 在我的例子中是 chrome 我也尝试过使用 Internet Explorer 情况相同 并且浏览器
  • xmpp 中的带内注册是什么?

    很抱歉不得不问 但我不知道这个术语的含义 也找不到简单的定义 我想知道我是否需要启用此功能 以便用户使用我正在编写的 iphone 客户端在我的 openfire 服务器上注册一个全新的帐户 Thanks 带内注册意味着在您的服务器上没有帐
  • DEVELOPER_TOKEN_NOT_APPROVED AdWords

    美好的一天 伙计们 我正在开发一个项目 需要设置 Google Adwords 帐户才能使用 API 我正在使用 Python 客户端库 当我运行测试应用程序时 出现 DEVELOPER TOKEN NOT APPROVED 错误 经过对这
  • 如何在 androidTest 上正确模拟 ViewModel

    我目前正在为片段编写一些 UI 单元测试 其中之一 Test就是看一个对象列表是否正确显示 这是不是整合测试 因此我希望mock the ViewModel 片段的变量 class FavoritesFragment Fragment pr
  • 如何检测假用户(爬虫)和cURL

    其他一些网站使用 cURL 和虚假 http 引用来复制我的网站内容 我们有什么方法可以检测 cURL 或不是真正的网络浏览器吗 没有什么神奇的解决方案可以避免自动抓取 人类能做的一切 机器人也能做 只有一些解决方案会让这项工作变得更加困难
  • JIRA:查找与用户相关的所有问题

    在 JIRA 中 如何查找所有项目中与用户相关的所有问题 简单的查询搜索仅产生全文结果 即 仅涉及名称被提及的问题 而不是名称已被分配 已报告 已抄送等的问题 我在这里的目的是寻找与我相关的股票会计票据 我使用的是 JIRA 3 13 as
  • ExtJS 6 按关联模型进行网格组

    Context 不久前我用过这个answer https stackoverflow com a 19198773 1842261实现远程排序和过滤 使用 关联模型 关联模型字段 格式 我可以轻松解析服务器端代码中的表达式以查询数据库 Pr
  • 如何使用 JavaScript 清除/重置 formData()?

    我正在使用formData进行Ajax图像上传 当我第一次提交时它将成功上传 并再次单击发布按钮该图像也发布到服务器 我认为formData不会清除 My Code postsubmitimage click function var fo
  • jQuery UI 自动完成 DownArrow UpArrow

    我在 jQuery 自动完成和移动向下箭头和向上箭头方面遇到一些问题 问题似乎在于
  • MySQL:多类别产品的 SQL 和 DB

    我正在开发一个现在拥有数百万条记录的网站 抱歉 无法透露哪个网站 最初它只有几百条记录 因此下面的查询是可以接受的 查询 SELECT FROM WHERE 类别 LIKE 3 但现在它只是杀死数据库 因为对于每个查询 它都必须使用上述查询