私はMySQLデータベースを持っています:
CREATE TABLE IF NOT EXISTS `tableexample` (
`id` int(11) NOT NULL auto_increment,
`val0` tinyint(1) NOT NULL,
`val1` tinyint(1) NOT NULL,
`val2` tinyint(1) NOT NULL,
`val3` tinyint(1) NOT NULL,
`val4` tinyint(1) NOT NULL,
`val5` tinyint(1) NOT NULL,
.................
`val1996` tinyint(1) NOT NULL,
`val1997` tinyint(1) NOT NULL,
`val1998` tinyint(1) NOT NULL,
`val1999` tinyint(1) NOT NULL,
UNIQUE KEY `id` (`id`),
) ENGINE=MEMORY ;
そして、最大 500 個のフィールドを指定できる次のクエリ:
SELECT
( ABS(`val1`-12)
+ ABS(`val22`-22)
+ ABS(`val23`-3)
+ ABS(`val45`-87)
+ ABS(`val76`-23)
........
+ ABS(`val1324`-7)
+ ABS(`val1576`-29)
) as valcal,
id
FROM `tableexample`
ORDER BY valcal ASC
LIMIT 5
また、からの番号ABS
はクエリごとに一意であり (12、22、3、87、23、7、29、...)、範囲は 0 ~ 99 です。
私はいくつかのテストを行いました:
for 1000 records the sql run in 0.024 seconds
for 10000 records the sql run in 0.231 seconds
for 50000 records the sql run in 1.123 seconds
for 100000 records the sql run in 2.179 seconds
for 200000 records the sql run in 4.316 seconds
for 300000 records the sql run in 6.451 seconds
データベースには約 300,000 のレコードがあるため、最適化のヒントはありますか?