2017-02-24 76 views
-2

我有一个MySQL表拥有数百万行搜索引擎庞大的MySQL数据库 - PHP

的,这是信息

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, 

我想要使用此查询

做IA搜索引擎
SELECT * FROM dbname 
    WHERE name LIKE '%$var%' 
     AND (age = '$age' 
     AND phone = '$phone' 
     AND country = '$country' 
     AND city = '$city') 

这个查询对性能有好处吗?或我应该使用什么? ..正如我以前说过的表是巨大的,包含数百万行

和太多的用户会每天使用这种查询

感谢咨询,

+1

尝试在您的服务器上运行查询,并亲自查看完成所需的时间是否满足您的要求。如果没有,请尝试在其上运行EXPLAIN查询以获取更多信息。 – NaeiKinDus

回答

0

请学会“数据库”之间的技术差异和'桌子'。大部分讨论都是关于'表格',而不是'数据库'。 ('数据库'是'表格'的集合;'表格'包含行和列的数据。)

标准化或缩写country。 2个字母的代码是很好的。然后申报专栏

country CHAR(2) CHARACTER SET ascii 

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

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

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

“数百万行”不符合“巨大”的条件。但是你需要一个索引。

LIKE带引号的通配符不能使用索引,所以我会忽略处理name的过滤器。

你有4个其他列AND d在一起 - 在任何或所有的单个索引将是非常有用的。

由于phone很可能是非常有选择性的,你可以有一个简单的

INDEX(phone) 

SELECT将运行速度非常快。

对于这个表和查询,没有必要也没有任何形式的分区或分片性能优势。