大型数据库的mysql优化

大型数据库的mysql优化,mysql,database,Mysql,Database,我正在使用PHP和MYSQL(MYISAM)创建一个电子商务web应用程序。我想知道如何加快我的查询速度 我有一个products表,其中有超过一百万条记录,有以下列:id(int,primary)catid(int)usrid(int)title(int)description(int)status(enum)date(datetime) 最近,我根据产品类别(catid)将这一个表拆分为多个表。认为这可能会减少服务器上的负载 现在,我需要结合以下条件集从这些表中获取结果1。与usrid和状态

我正在使用PHP和MYSQL(MYISAM)创建一个电子商务web应用程序。我想知道如何加快我的查询速度

我有一个products表,其中有超过一百万条记录,有以下列:id(int,primary)catid(int)usrid(int)title(int)description(int)status(enum)date(datetime)

最近,我根据产品类别(catid)将这一个表拆分为多个表。认为这可能会减少服务器上的负载

现在,我需要结合以下条件集从这些表中获取结果1。与usrid和状态匹配的结果。(获取用户产品)2个匹配状态和标题或描述的结果(例如:用于产品搜索)

现在,我必须使用UNION从这些合并的所有表中获取结果,这会降低性能,而且我也不能对合并的结果集应用限制。我想在所有这些列上创建一个索引,以加快搜索速度,但这可能会减慢插入和更新的速度。而且我开始觉得分开桌子从一开始就不是个好主意


我想知道在这种情况下优化数据检索的最佳方法。我也愿意接受新的数据库模式建议。

您考虑过使用memcached吗?它缓存服务器上数据库查询的结果集,并在多个用户请求时返回结果集。如果找不到缓存结果集,则只会查询数据库。它将显著减轻数据库的负载


您考虑过使用memcached吗?它缓存服务器上数据库查询的结果集,并在多个用户请求时返回结果集。如果找不到缓存结果集,则只会查询数据库。它将显著减轻数据库的负载

开始:然后打开

其他一些建议:

如果每个类别使用单独的表,请使用
UNION ALL
而不是
UNION
。联合的原因意味着明确性,这使得数据库引擎做额外的工作来消除不必要的行重复

索引确实会增加写入代价,但您描述的可能读写比至少为10:1,可能更像1000:1或更高。所以索引。对于您描述的两个查询,我可能会创建三个索引(您需要研究explain计划以确定哪一列顺序更好)

  • 乌斯里德与地位
  • 地位和头衔
  • 状态和描述(这是一个可索引字段吗?)
  • 关于索引的另一个注释,即包含所有列的索引,如果您的频繁访问模式之一是通过主键检索,那么它也是一个有用的解决方案

    开始:然后打开

    其他一些建议:

    如果每个类别使用单独的表,请使用
    UNION ALL
    而不是
    UNION
    。联合的原因意味着明确性,这使得数据库引擎做额外的工作来消除不必要的行重复

    索引确实会增加写入代价,但您描述的可能读写比至少为10:1,可能更像1000:1或更高。所以索引。对于您描述的两个查询,我可能会创建三个索引(您需要研究explain计划以确定哪一列顺序更好)

  • 乌斯里德与地位
  • 地位和头衔
  • 状态和描述(这是一个可索引字段吗?)

  • 关于索引的另一个注释,即包含所有列的索引,如果您的频繁访问模式之一是通过主键检索,那么它也是一个有用的解决方案

    你能给我们提供一个数据库布局示例吗?另外,您是否考虑过使用<代码>连接< /代码>?如果您用相关的表和键给出了当前数据库模式的概述,这将是有益的。对于具有数百万条记录的表,我建议根本不要将它们合并或连接到其他表,但是在表上执行单个查询并让脚本组合结果。关于索引:@bobby join不会在这里给我所需的结果,如果我想在所有表中一起搜索。@oli将结果与脚本组合是我脑海中的一个想法,这将是我最后的选择。特别是因为对联合查询应用限制是不可能的。您能给我们提供一个数据库布局示例吗?另外,您是否考虑过使用<代码>连接< /代码>?如果您用相关的表和键给出了当前数据库模式的概述,这将是有益的。对于具有数百万条记录的表,我建议根本不要将它们合并或连接到其他表,但是在表上执行单个查询并让脚本组合结果。关于索引:@bobby join不会在这里给我所需的结果,如果我想在所有表中一起搜索。@oli将结果与脚本组合是我脑海中的一个想法,这将是我最后的选择。特别是因为对联合查询应用限制是不可能的,我观察到mysql本质上为查询提供了缓存机制。但我从查询和模式设计的角度寻找优化,我观察到mysql本质上为查询提供了缓存机制。但我从查询和模式设计的角度寻找优化。