Sizin "arama motoru" hızlı üç şey esas olarak bağlıdır:
- SQL Sorgulama
- Sizin veritabanı tasarımı
- Sizin MySQL yapılandırma
Yani hiçbir "bu anahtarı çevirmek ve süper kandırılan performans alırsınız" olacak. Tüm bu alanlarda mücadele etmek gerekir. Buna ek olarak performansı üzerinde bir etkisi olabilir pek çok başka şeyler vardır. Örneğin: işletim sistemi, sabit disk, bellek vs miktarı
MySQL yapılandırması ile başlayalım. Önce mysql sorgu önbelleğe alma özelliği denemek gerekir. Eğer ağırlıklı olarak okuma işlemleri varsa herşey önbelleğine gelir ve hiçbir i / o işlemleri ihtiyaç vardır çünkü bu sizin performansınızı artırabilir.
Burada okuyun: MySQL Documentation on Query Cache
Bir diğer önemli alan veritabanı tasarımı veya hangi veritabanı motoru seçmektir. Temelde üç seçeneğiniz var: InnoDB, MyISAM ve Bellek (Orada başkaları vardır ama ben onları gerçekten bilmiyorum).
Bildiğim kadarıyla MyISAM ve Bellek bildiğimiz gibi sadece masa kilitleme destek ve kilitleme satır değil. Fakat yine de, özellikle okuma işlemleri yaparsanız bu sizi etkilemez. Genel olarak, her ikisi de InnoDb daha hızlıdır. Ben olsaydım her şey bellekte tutmak beri ben Bellek ile başlamak istiyorum. Ancak etkilerinin farkında olmak: belki daha fazla bellek ihtiyacı ve sunucu çöker eğer kaydedilmemiş verileri kaybedersiniz.
InnoDB, diğer yandan size veri güvenliği bir sürü verir ve aynı zamanda oldukça hızlı, doğru yapılandırmak durumunda olabilir. Unfortunetly Bu, geniş bir alandır. Yani hepsini kapsamaz. Ile başlamak için bir şey bellek yaklaşık% 80 innodb_buffer_pool_size ayarlamaktır. Yani RAM 10GB varsa 8GB için ayarlayın.
Sunucu 8'den fazla CPU varsa, siz de daha yüksek bir sayıya innodb_thread_concurrency ayarlamak isteyebilirsiniz. Sen CPU 2 * sayısı kullanmalısınız.
MySQL performansı hakkında daha fazla bilgi edinmek istiyorsanız size bir fincan kahve kapmak ve bu blogu okumalısınız: MySQL performance blog
Bir diğer önemli şey sütunlar bazı endeksleri kullanmak olabilir. Çince sözlük bilgim ;) sınırlı olduğundan bu durumda kapalı ödeyecek Ama ben gerçekten söyleyemem
Genellikle birincil anahtar alanını konuşan bir dizin olmalıdır. Buna ek olarak sık sık sorgulamak alanlar için indisleri de kullanabilirsiniz ve o nadiren değişiklik (çekirdekler gerekir böylece endeksi geçersiz bir dizin alan her değişiklik -> performans sorunu).
Bildiğim kadarıyla aynı zamanda sütun farklı bir çok veri tutan durumda kullanılmalıdır. Örneğin sadece büyük olasılıkla sadece yarısında dizin ağacı kıracak "erkek" veya "kadın" tutan bir sütun "toplumsal cinsiyet" varsa. 100 kullanıcıları varsa 50 satır ile sona erecek. Eşsiz çoğu durumda kendi telefon numarası, bir dizin kullanmak Ama eğer, çok daha etkili olan tek bir satır ile sona erecek.
Yani belki sütununda ch_smpl için bir dizin kullanmalısınız.
Son ama en az değil, sorgu. Benim ilk tavsiyem mümkün olduğunca az veri seçmek için. Bu gibi sorguları önlemek anlamına gelir:
select * from ...
Senin durumunda: Eğer sadece bu sorguyu kullanmalısınız 我 için tanım var isterseniz:
select definition from dictionary where ch_smpl = '我'
olup
select * from dictionary where ch_smpl = '我'
Bu sütun için indeks devre dışı kalır beri Ayrıca SEARCHTERM önünde yüzde sembolü ile "gibi"-Tablolar kaçının.
Örneğin:
select * from dictionary where ch_smpl like '%我'
Sadece dönem sonra yüzde sembolü kullanmak gerekir:
select * from dictionary where ch_smpl like '我%'
Tavsiye son bir parça. Daha önce de söylediğim gibi çevirebilirsiniz özel anahtarı vardır. Eğer daha iyi bir performans elde etmek için yapabileceğiniz bir çok şey vardır. Bir kaç şey denemek ve performansını ölçmek.