Dosya adlarını yalnızca belirtilen tabloya ekleyen dosya dizinleyicisi oluşturdum. Şimdi dosya isimlerini aramanın en iyi yolunu düşünüyorum. Tabloda 100000+ dosya olabilir, bu nedenle performans önemlidir.Büyük veri kümesini sorgulamak için en uygun arama sorgusu ve yapısı
Dosya adı farklı olabilir - 10, 20, 50 veya daha fazla karakter uzunluğunda olabilir. En azından şimdilik, test veri kümemde adlarında boşluk bulunan dosya yok. Kullanıcı kısmi arama yapabilir, örneğin '1001' i arayan dosyayı 10_1001_20_30_40_50 adıyla döndürmelidir.
Benim şu anki tablo yapısı:
CREATE TABLE `file` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`id_category` int(10) unsigned NOT NULL,
`filename` varchar(255) NOT NULL,
`file_ext` varchar(3) NOT NULL,
`date_added` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`,`id_category`),
KEY `idx_file_filename` (`filename`) USING BTREE,
KEY `fk_file_1_idx` (`id_category`),
FULLTEXT KEY `filename` (`filename`)
) ENGINE=MyISAM AUTO_INCREMENT=24974 DEFAULT CHARSET=utf8;
INSERT INTO `file` (`id`,`id_category`,`filename`,`file_ext`,`date_added`) VALUES (22474,14199,'095_98_1002_1003_148_98_1001_003','pdf','2016-03-19 19:02:12');
INSERT INTO `file` (`id`,`id_category`,`filename`,`file_ext`,`date_added`) VALUES (22475,14199,'095_98_1002_1003_148_98_1001_001','pdf','2016-03-19 19:02:11');
ben KARŞI MATCH()() kullanmayı denedik, ancak bu dizede boşluk varsa ve istemediğiniz takdirde bu iyi bir fikir değil çıktı "dize arama içeriyorsa" gibi yap: "
SELECT id, filename FROM `file` WHERE MATCH(filename) AGAINST ('1002*' IN BOOLEAN MODE);
Bu, ihtiyacım olanı geri getirmeyecek. (Min. Dize uzunluğu kullanıcı sağlayabilir):
SELECT * FROM `file` WHERE MATCH(filename) AGAINST ('100*' IN BOOLEAN MODE);
Elbette bırakabilir Ne düşünüyorum 3 uzunluk içine boşluklarla ayrılmış parçaları ithalatı ve onları bu gibi sorguları kullanırken bölünmüş tüm dosya, tam metin kullanmaktır dosya adları olduklarını ve operatör GİBİ kullandıkça:
SELECT * FROM `file` WHERE filename LIKE '%100%'
ama çok büyük veri kümeleri için GİBİ kullanmayla ilgili olumsuz görüşler vardır. Dosya adlarına boşluk ekleyerek çözümümün iyi bir fikir olacağını merak ediyorum. Tam metin kullanmaya çalışmak
Ale Sadece 1002 mi arıyorsunuz, yoksa daha uzun dizileri (1002_1003) aramak ister misiniz? –
Herhangi bir sorgu olabilir> = 3 karakter –