我正试图提高现有MySQL数据库的性能。MySQL索引 - 如何提高性能?
它是关于餐馆数据库,有两个相关的表:
还有一个供网站的所有实体表,每个实体都有一个唯一的ID, 一个实体可以是几乎任何东西,它可以是一个餐厅,用户和其他许多东西。 有几种实体类型,而餐厅的实体类型是“对象”。
我还要说这个数据库的结构已经存在了很多 所以我不想做大的修改,例如我不打算删除所有实体的表 。 (数据库本身没有数据,但是PHP引擎是这样构建的,所以它很难对结构进行大的修改)。
也有一个表只能为对象,有几种类型在数据库 对象,但餐馆专门将是 搜索了很多,因为这是该网站的主题, 餐馆有几个领域:国家,城市,名称,流派。 在同一个城市和国家不能有两个同名的餐厅, (例如,可以有两个餐厅同名,但在同一个国家的不同城市 或两个同名的餐厅但在不同的国家)
所以从这个事实,我想我应该做一个独特的三列索引的国家,城市和名称列。
另外我想说的是,URL也是以www.domain.com/Country/City/Restuarant-Name的形式构建的,所以国家城市名称的组合应该快速获取,这种类型的查询会发生很多。
但也会有许多其他类型的查询,如:搜索名称为 餐厅(使用LIKE查询,因为搜索的名称可以是全名的一部分 ))城市或某个国家。 搜索某个国家和城市中某个流派的所有餐馆。 和几乎所有可能的组合。
也许是最常用的查询将是:(a)为餐馆名称搜索某市 和国家(这将是一样的,当一个URL被输入,但将使用 LIKE使用的查询),(B )在某个城市和国家搜索某种类型的餐馆。 和最后(C)在搜索餐馆的名字在全球范围(在整个数据库,而不指定城市和国家)
这个表(对象表),目前有PRIMARY KEY是对象的ID, 该ID还使用了很多,将最好的做法是以下?:
- 做一个三列的唯一指标了国家,城市的,名称
- 再拍(不是唯一的)索引超出名字(所以我上面写的类型c的查询将会执行得很快)
- 可能会创建某种子表,其中只包含 表中的餐馆,因此将查询此子表。
我真的很感激任何帮助,因为我(因为如果我决定 做出大的改变我可能会单独从对象 其余的餐馆开始,这是不那么重要)我一直试图决定这个很长一段时间。
ps在对象表中的一些对象将不会有任何类型或任何国家或城市,所以他们将保持NULL,我知道NULL值是允许在一个唯一的键,但它会对 有影响表演?
感谢名单了很多的人谁愿意阅读本长的问题:)
http://stackoverflow.com/questions/6098616/dos-and-donts-for-indexes/ –
@Denis感谢您的链接。为了表现,索引是关键。潘打算。 – Wiseguy