Php和mysql。分类广告网站的数据管理

时间:2014-12-10 16:56:41

标签: php mysql

访问者打开网址,例如

/transport/cars/audi/a6

/real-estate/flats/some-city/city-district

我为carsreal-estate计划了单独的表格(每个顶级类别都有单独的表格)。

基于url(php explode创建数组)

$array[0] - 基于值知道SELECT

的哪个表格

依此类推$array[1], $array[2] ...

例如,RealEstate表可能如下所示:

IdOfAd  | RealEstateType  | Location1  | Location2    | TextOfAd | and so on
----------------------------------------------------------------------
 1      | flat            | City1      | CityDistric1 |  text..  |
 2      | land            | City2      | CityDistric2 |  text..  |

显示广告的mysql查询如下:

SELECT `TextOfAd`, `and so on...` 
WHERE RealEstateType = ? AND Location1 =? AND Location2 = ? 
// and possibly additional  AND .. AND
LIMIT $start, $limit

考虑表现。希望经过一段时间后,活跃广告的数量会很高(我还打算不删除过期的广告,只需将列值更改为0,不显示SELECT;但如果直接从搜索引擎访问则显示)。

我需要做什么(以其他方式更改数据库设计或SELECT),例如表格中的行数是100 000还是数百万?

考虑将过期的广告转移到另一个表格(性能不重要)。例如,从搜索引擎用户转到某个已过期广告的网址。首先选择主表,如果找不到,则在表格中选择过期广告。这是某种解决方案吗?

1 个答案:

答案 0 :(得分:1)

两个提示:

  1. 创建表格时使用ENGINE=InnoDB。 InnoDB使用行级锁定,这对于更大的表来说更好,因为这样可以更快地读取行,即使您正在更新其中的一些行。

  2. 在适当的列上
  3. ADD INDEX。索引大表可以将搜索时间减少几个数量级。他们很容易忘记并且很难调试!不止一次,我一直在研究一个缓慢的查询,意识到我忘记了一个合适的INDEX,添加了它,并立即获得了一个过去需要15秒才能运行的查询结果。