Bu alanda çok sütunlu bir dizin zaten varsa, tabloya yeni bir tek sütun dizini eklemem gerekir mi?


10

Ben çok sütunlu bir tablo ettik UNIQUEüzerindeki endeks _job_id__ve __keyword_id__.

Ayrıca , bu sütunda __job_id__bir gerçekleştiren sık sorgum varsa başka bir dizin eklemem gerekir mi GROUP BY?

(100 milyon satırda biraz zaman alabilir. Bu yüzden sadece yapmak yerine soruyorum)


Gerçek sorunuz yavaş bir sorgu ile ilgili ise, lütfen GÖSTER TABLO OLUŞTUR TABLO DURUMUNU GÖSTER DEĞİŞKENLERİ DEĞİŞTİR '% buffer%' EXPLAIN SELECT ... Ne kadar RAM var? Bunun birçok nedeni olabilir; çoğu bu öğelere bakarak tespit edilebilir.
Rick James

Yanıtlar:


5

Hayır, hiç de değil !!! MySQL Sorgu Optimize Edici, gerekli ana sütun (lar) dizinde en solda ise doğru olanı yapar. Böyle bir dizin oluşturduysanız, her zaman GROUP BY job_id, keyword_id gerçekleştirirseniz MySQL Sorgu Optimize Edici bu dizini kullanmamayı tercih edebilir. MySQL Sorgu İyileştiricisi, kayıtları yalnızca job_id ile toplarsanız dizini kullanabilir veya kullanmayabilir, ancak yine de yedekli bir dizin israfına sahip olursunuz.

Tablo MyISAM ise, böyle bir dizin oluşturmak MYI dosyasını şişirir.

Tablo InnoDB ve innodb_file_per_table 0 ise, böyle bir dizin oluşturmak sadece ibdata1'i şişirir.

Tablo InnoDB ve innodb_file_per_table 1 ise, böyle bir dizin yapmak tablonun .ibd dosyasını şişirir.

Özetle, bu ek dizin yapmak gerekmez !!!


Emin misiniz? Bu adam aksini gösteriyor: stackoverflow.com/questions/179085/… ya da bu MySQL'den MSSQL'e farklı mı?
Tadej

4

Endeksler sadece hızlandırabilir group bytarafından faaliyete sıralama indirgeme - kullanılan bir indeks ise, bu daha verimli olacaktır kümelenmiş dizin ya da en azından kümelenmiş dizin aynı gelen sütun içerir. Tüm bu MySQL hash group bygenellikle herhangi bir endeksleri herhangi bir yarar atlayacak bir işlem eşdeğer olduğunu varsayalım - belki başka biri bunu onaylayabilirsiniz.

job_idCümledeki tek sütun group byolduğunu ve kümelenmiş dizin olmadığını varsayarak ayrı bir dizine sahip olmanın marjinal bir yararı vardır : dizin daha küçük olur ve bu nedenle tarama daha az G / Ç üretecektir

--DÜZENLE--

Bir dizin , ikincil dizindejob_id bulunmayan kümelenmiş dizin anahtarı için tanımlanan tüm birincil anahtar alanlarını içerdiğinden , bir dizin yalnızca kümelenmiş dizinin bir parçası job_id, keyword_iddeğilse üzerindeki bir dizinden daha küçük olacaktır keyword_id.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.