我有一个大型数据库用于包含大约5000万行的电话目录,每行包含两列" phonenumber"第二个是"名字" ,电话号码是长度为15个字符的varchar,"名称" column也是varchar,长度为500,names列包含多个人名,用";"分隔。
该数据库中的问题是当我使用选择查询来搜索它执行得非常快的数字时,但当我使用类似"%marlin%搜索人名时,它执行速度非常慢,因为它是对表格进行全面扫描。
我如何重新设计我的数据库结构,以便在搜索任何具有特定名称的电话号码时进行快速查询,例如"%martin%"?
ps:我对MYSQL有基本的了解;
非常感谢您的帮助
答案 0 :(得分:0)
您需要规范化数据库。目前,您的名称字段中有一个“子数据库”,您需要单独的
numbers: id, number
persons: id, name
person_numbers: person_id, number_id
现在您需要在persons
表中找到该名称,然后是数字。这可能不会快得多,具体取决于有多少名称。
下一步可能是在persons.name
字段
请注意,这是一个快速,真正简化的版本,您需要做的事情,但看到您的问题和当前状态,您是一个初学者。开始阅读这些内容,你可能还有很多步骤要做到这一点。您甚至可能想要考虑非sql解决方案。