2017-01-30 64 views
-1

我有一个大型数据库的电话目录至少包含约50万行,每行包含两列“电话号码”,第二个是“名称”,电话号码是varchar 15字符长度,“名称”列也是长度为500的varchar,名称列包含多个以“;”分隔的人名,最佳的SQL数据库结构的大手机目录

该数据库的问题是,当我使用选择查询来搜索它执行速度非常快的数字时,但是当我使用类似“%marlin%”搜索人名时,它执行速度非常慢,因为它正在执行全扫描该表

我如何重新设计我的数据库结构,以具有快速查询的时候我搜索了包含“%马丁%”的具体名称的任何一个电话号码

PS:?我在MYSQL有基础知识;

非常感谢帮助

+0

多个名字的意思是? 2人或更多2人可以有相同的号码? –

+0

使用全文搜索进行调查。是的,即使存在,'%martin%'搜索也不能在'names'列上使用索引。 –

+0

这样的多个名字:martin; martin sylvie,martin garagel; sylvie – Slash2016

回答

0

您需要规范化数据库。目前,你有你的名字,领域的“子数据库”,并希望该独立

numbers: id, number 
persons: id, name 
person_numbers: person_id, number_id 

现在,您需要在persons表中找到名字,然后把它的数字。这可能不会更快,取决于有多少名字。

下一步可能是一个索引添加到您的persons.name

注意,这是你需要做的是做,但看到你的问题和当前状态啥子快速,真正简化版本,你是初学者。开始阅读这些东西,你可能有更多的步骤去做到这一点。你甚至可能想考虑非SQL解决方案。

+0

非常感谢您的帮助 – Slash2016