、、 として定義された 2 つのbigint
列を含むテーブルがあります。はです。beginNumber
endNumber
UNIQUE
ID
Primary Key
ID | beginNumber | endNumber | Name | Criteria
2 番目のテーブルには数値が含まれています。table2 の数値が任意の 2 つの数値の間にあることがわかったときに、table1 からレコードを取得したいと考えています。クエリは次のとおりです。
select distinct t1.Name, t1.Country
from t1
where t2.Number
BETWEEN t1.beginIpNum AND t1.endNumber
非常に多くのレコードがあるため、クエリに時間がかかりすぎています。DBの経験はありません。しかし、テーブルにインデックスを付けると検索が改善されるため、MySQL は m Number について検索するすべての行を通過する必要がなく、たとえばUNIQE
値を持つことでこれを行うことができると読みました。table1の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
これはテーブルのおもちゃの例ですが、関係する部分を示しています。