搜索引擎庞大的MySQL数据库 - PHP
问题描述:
我有一个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')
这个查询对性能有好处吗?或我应该使用什么? ..正如我以前说过的表是巨大的,包含数百万行
的和太多的用户会每天使用这种查询
感谢咨询,
答
请学会“数据库”之间的技术差异和'桌子'。大部分讨论都是关于'表格',而不是'数据库'。 ('数据库'是'表格'的集合;'表格'包含行和列的数据。)
标准化或缩写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
将运行速度非常快。
对于这个表和查询,没有必要也没有任何形式的分区或分片性能优势。
尝试在您的服务器上运行查询,并亲自查看完成所需的时间是否满足您的要求。如果没有,请尝试在其上运行EXPLAIN查询以获取更多信息。 – NaeiKinDus