大型数据库的mysql优化
我正在使用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从这些合并的所有表中获取结果,这会降低性能,而且我也不能对合并的结果集应用限制。我想在所有这些列上创建一个索引,以加快搜索速度,但这可能会减慢插入和更新的速度。而且我开始觉得分开桌子从一开始就不是个好主意大型数据库的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和状态
我想知道在这种情况下优化数据检索的最佳方法。我也愿意接受新的数据库模式建议。您考虑过使用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本质上为查询提供了缓存机制。但我从查询和模式设计的角度寻找优化。