2017-01-30 40 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