搜索引擎到一个巨大的mysql数据库 - php

时间:2017-02-24 17:42:02

标签: php mysql performance

我有一个包含数百万行的mysql表

这就是信息

id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
dob date NOT NULL,
name VARCHAR(32) NOT NULL,
age VARCHAR(2) NOT NULL,
country VARCHAR(25) NOT NULL,
phone VARCHAR(32) NOT NULL,
city VARCHAR(32) NOT NULL,
comment tinytext NOT NULL,

使用此查询的搜索引擎我想做什么

SELECT * FROM dbname
    WHERE name LIKE '%$var%'
      AND ( age = '$age'
      AND phone = '$phone'
      AND country = '$country'
      AND city = '$city')

这个查询对性能有好处吗?或者我应该使用什么? ..正如我之前所说,表格很大,包含数百万行

每天有太多用户使用此查询

感谢您的建议,

1 个答案:

答案 0 :(得分:0)

请了解'数据库'之间的技术差异和'表'。大多数讨论都是关于表格,而不是数据库'。 (A'数据库'是'表的集合;'表'包含行和列中的数据。)

标准化或缩写country。两个字母的代码很好。然后声明列

    country CHAR(2) CHARACTER SET ascii

age VARCHAR...?使用TINYINT UNSIGNED,它要小得多。或者......计算它,因为你有dob

TINYTEXT有一些微妙的问题;使用等效的VARCHAR(255)

出生日期被视为敏感信息;重新考虑你是否应该收集和储存这些。

"数百万行"没有资格作为“巨大的”'。但是你需要一个索引。

带有前导通配符的

LIKE无法使用索引,因此我将忽略处理name的过滤器。

您还有4个其他列AND d在一起 - 任何一个或所有列中的单个索引都非常有用。

由于phone可能非常具有选择性,因此您可以使用简单的

    INDEX(phone)

并且SELECT运行得非常快。

表和查询的任何形式的分区或分片都不需要,也没有性能优势。