访问者打开网址,例如
/transport/cars/audi/a6
或
/real-estate/flats/some-city/city-district
我为cars
和real-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还是数百万?
考虑将过期的广告转移到另一个表格(性能不重要)。例如,从搜索引擎用户转到某个已过期广告的网址。首先选择主表,如果找不到,则在表格中选择过期广告。这是某种解决方案吗?
答案 0 :(得分:1)
两个提示:
创建表格时使用ENGINE=InnoDB
。 InnoDB使用行级锁定,这对于更大的表来说更好,因为这样可以更快地读取行,即使您正在更新其中的一些行。
ADD INDEX
。索引大表可以将搜索时间减少几个数量级。他们很容易忘记并且很难调试!不止一次,我一直在研究一个缓慢的查询,意识到我忘记了一个合适的INDEX
,添加了它,并立即获得了一个过去需要15秒才能运行的查询结果。