我有一张表,其中包含两个bigint
列:beginNumber
,endNumber
,定义为UNIQUE
。 ID
是Primary Key
。如何提高MySQL中的搜索性能
ID | beginNumber | endNumber | Name | Criteria
第二张表包含一个数字。当table2中的数字被发现在任何两个数字之间时,我想从table1中检索记录。这是查询:
select distinct t1.Name, t1.Country
from t1
where t2.Number
BETWEEN t1.beginIpNum AND t1.endNumber
查询是花了太多的时间,因为我有这么多的记录。我没有DB的经验。但是,我读到索引表会改进搜索,因此MySQL不必通过搜索m数的每一行来通过,例如,可以通过具有UNIQE
值来完成此操作。我将表1中的beginNumber
& endNumber
设为UNIQUE。这是我能做的吗?有没有什么可能的方法来改善时间?请提供详细的答案。
编辑:
表1:
CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`beginNumber` bigint(20) DEFAULT NULL,
`endNumber` bigint(20) DEFAULT NULL,
`Name` varchar(255) DEFAULT NULL,
`Criteria` varchar(455) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `beginNumber_UNIQUE` (`beginNumber`),
UNIQUE KEY `endNumber_UNIQUE` (`endNumber `)
) ENGINE=InnoDB AUTO_INCREMENT=327 DEFAULT CHARSET=utf8
表2:
CREATE TABLE `t2` (
`id2` int(11) NOT NULL AUTO_INCREMENT,
`description` varchar(255) DEFAULT NULL,
`Number` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id2`),
UNIQUE KEY ` description _UNIQUE` (`description `)
) ENGINE=InnoDB AUTO_INCREMENT=433 DEFAULT CHARSET=utf8
这是表的玩具的例子,但它显示了相关部分。
请为两个表格添加一个“show create table”输出。 – ethrbunny