Saya mempunyai jadual besar dengan lebih daripada 3B baris dan pertanyaan saya kini mengambil masa 3 hari untuk dilaksanakan.
Ini adalah pertanyaan saya:
masukkan ke dalam perkataan frekuensi (perkataan, kekerapan, nama fail) pilih perkataan, kira(*) sebagai kekerapan, maks(nama fail) daripada allwordstemp kumpulan mengikut perkataan
Pada asasnya, pertanyaan saya adalah untuk mengumpulkan mengikut perkataan daripada jadual allwordstemp, dan saya ingin mengetahui nama fail apabila kekerapan = 1, itulah sebabnya saya menambah max(nama fail), Kerana nama fail perlu dimasukkan dalam fungsi agregat, seperti maks. Jika kekerapan > 1, saya juga tidak memerlukan nilai nama fail. Kedua-dua jadual mempunyai 2 indeks pada perkataan dan nama fail.
jadual allwordstemp (nama fail ialah fail id):
BUAT JADUAL `allwordstemp` ( `perkataan` varchar(45) LALAI NULL, `nama fail` int(11) NULL LALAI, KEY `idx_allwordstemp_word` (`word`), KEY `idx_allwordstemp_filename` (`filename`) ) ENJIN=CHARSET LALAI InnoDB=utf8;
jadual kata kekerapan:
BUAT JADUAL `frequencywords` ( `perkataan` varchar(45) LALAI NULL, `frekuensi` int(11) LALAI NULL, `nama fail` int(11) NULL LALAI, KEY `idx_frequencywords_word` (`word`), KEY `idx_frequencywords_frequency` (`frequency`), KEY `idx_frequencywords_filename` (`filename`) ) ENJIN=CHARSET LALAI InnoDB=utf8;
Terangkan pemilihan:
+----+-------------+------------ ---------------------------------------------------+----------- ---- ------------+---------+------+-----------+--- ---- ---+-------------+ |. pilih_jenis | +----+-------------+--------------+--------------- -------------------------- -----+------+------------+----------+----------- -- + |. +----+-------------+--------------+--------------- ------------------------- -----+------+------------+----------+----------- -- +Bagaimanakah saya boleh membuat pertanyaan saya lebih cepat?
Penapis anda nampaknya berdasarkan kekerapan, bukan perkataan atau nama fail. Jadi saya mula-mula mengindeks semua perkataan mengikut kekerapan.
Kemudian, dengan mengandaikan kekerapan ialah integer, saya akan menambah klausa WHERE seperti ini:
Di atas akan memberikan anda senarai semua perkataan yang muncul sekali sahaja dalam pelbagai nama fail.
Semoga ini membantu, dan semua yang terbaik!