我有一个包含 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) 。
我正在寻找一种充分利用我的数据库的方法。
有什么建议吗?
最佳答案
尝试对您正在使用的两个字段使用索引。在您的示例中:
create index idx_data_name_last on data (first, last);
这将只使用一个索引,因此时间将是 log(n) 而不是 n*log(n)。
关于MySQL搜索搜索字段的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21506044/