我有一个包含500,000行的MySQL数据库。
我有一个包含500,000个组合字符串的列表,例如First_Name和Last_Name。
我正在尝试使用类似的查询搜索500,000行
select count(*) FROM data WHERE first='wadaw' AND last='wdvv';
问题是它需要花费太多时间,我使用多个线程,考虑到MySQL与查询运行时间之间的通信开销,它看起来效率不高。我想通过更改数据库的设置来开始改进,以更好地适应我的数据并为它优化MySQL数据库。
根据我对搜索算法的经验,未排序的列表将使用最广泛使用的方法的n * log(n)和具有基数排序等的N,这使得我的案例为n ^ 2或n ^ 2log(n)如果你有1,000,000个字段,这不是那么好。
但是使用二进制搜索它会占用Log(n),因此我的情况需要n * log(n)。
我正在寻找一种方法来充分利用我的数据库。
有什么建议吗?
答案 0 :(得分:1)
尝试为您正在使用的两个字段使用索引。在您的示例中:
create index idx_data_name_last on data (first, last);
那将仅使用一个索引,因此时间将是log(n)而不是n * log(n)。