Saya telah membaca artikel tentang FORCEindeks, tetapi bagaimana saya bisa memaksa MySQL ke IGNORE ALLindeks?
Saya mencoba SELECT * FROM tbl IGNORE INDEX(*), tetapi saya tidak berhasil.
Adapun mengapa saya (dan lainnya) perlu melakukan ini: Misalnya, saya perlu merangkum statistik referensi dengan tld seperti ini:
SELECT
count(*) as c,
SUBSTRING
(
domain_name,
LENGTH(domain_name) - LOCATE('.', REVERSE(domain_name)) + 2
) as tld
FROM `domains_import`
IGNORE INDEX(domain_name)
GROUP BY tld
ORDER BY c desc
LIMIT 100
... tapi saya selalu harus melihat indeks apa yang didefinisikan atau menentukan indeks apa yang akan digunakan melalui Jelaskan. Akan sangat berguna untuk sekadar menulis IGNORE INDEX ALLdan tidak peduli.
Adakah yang tahu sintaks atau hack? (Puluhan baris melalui tabel definisi MySQL benar-benar bukan jalan pintas).
Ditambahkan dari diskusi obrolan :
Bechmark:
tidak ada indeks = 148,5 detik
dengan indeks = 180 detik dan masih berjalan dengan Mengirim data Array SSD sangat kuat, sehingga Anda hampir tidak peduli dengan cache data ...
Definisi untuk tolok ukur:
CREATE TABLE IF NOT EXISTS `domains_import` (
`domain_id` bigint(20) unsigned NOT NULL,
`domain_name` varchar(253) CHARACTER SET ascii COLLATE ascii_bin NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `domains_import`
ADD PRIMARY KEY (`domain_id`),
ADD UNIQUE KEY `domain_name` (`domain_name`);
ALTER TABLE `domains_import`
MODIFY `domain_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT;
InnoDB, tes dengan indeks (tanpa USE INDEX () atau serupa) masih berjalan, 250 detik, saya baru saja membunuhnya.
LEFT JOINsaya miliki. `USE INDEX ()` membuat MySQL melakukan pemindaian tabel pada tabel 20K dan 1-ke-1JOINalih-alih melintasi 500 baris di antara dua indeks. Mendapat 20x lebih cepat.