我正在使用PHP和MYSQL(MYISAM)创建电子商务Web应用程序。我想知道如何加快我的查询速度
我有一个包含以下列的超过一百万条记录的产品表:id(int,primary)catid(int)usrid(int)title(int)description(int)status(enum)date(datetime)
最近我根据产品类别(catid)将这一个表分成多个表。认为它可能会减少服务器上的负载。
现在我需要从这些表中获取结果以及以下条件集1.匹配usrid和status的结果。 (以获取用户产品)2个匹配状态和标题或描述的结果(例如:用于产品搜索)
现在我必须使用UNION从这些所有表中获取结果,这会减慢permormance,我也无法将LIMIT应用于组合结果集。我想在所有这些列上创建索引以加快搜索速度,但这可能会减慢INSERTS和UPDATES的速度。我也很想到,从一开始就把桌子拆开不是一个好主意。
我想知道在这种情况下优化数据检索的最佳方法。我也对新的数据库模式提议持开放态度。
答案 0 :(得分:1)
要开始:load test并启用MySQL slow query log。
其他一些建议:
如果每个类别使用单独的表格,请使用UNION ALL
代替UNION
。原因是UNION意味着清晰度,这使得数据库引擎做了额外的工作来不必要地重复删除行。
指数会增加写入惩罚,但您所描述的可能具有至少10比1的读写比率,可能更像是1000比1或更高。索引。对于您描述的两个查询,我可能会创建三个索引(您需要研究解释计划以确定哪个列顺序更好)。
关于索引的另一个注释creating a covering index,即包含所有列的索引,如果您的一个频繁访问模式是通过主键检索,也可以是一个有用的解决方案。
答案 1 :(得分:0)
你考虑过使用memcached吗?它从服务器上的数据库查询中缓存结果集,并在多个用户请求时返回它们。如果它没有找到缓存结果集,那么它才会查询数据库。它应该显着减轻数据库的负担。