私は450000行のニュースがいっぱいのテーブルを持っています。 テーブルスキーマは、このようなものです:Mysqlのインデックス構成
CREATE TABLE IF NOT EXISTS `news` (
`id` int(11) NOT NULL auto_increment,
`cat_id` int(11) NOT NULL,
`title` tinytext NOT NULL,
`content` text NOT NULL,
`date` int(11) NOT NULL,
`readcount` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `cat_id` (`cat_id`),
KEY `cat_id_2` (`cat_id`,`id`),
KEY `cat_id_date` (`cat_id`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin5 AUTO_INCREMENT=462679 ;
私はページのためにいくつかのニュースを取るために、以下のようなSQLコマンドを実行すると、「X」カテゴリページのxが100を超えている場合には、15秒以上かかります。
select * news where cat_id='4' order by id desc limit 150000,10;
説明この質問を書いている間、私はまた、このような、より単純なSQLクエリをチェックし、それがまた分に近くかかった
をそのは、「どこで」使用していることを示しており、インデックス「cat_id_2」:
select * from haberler order by id desc limit 40000,10;
SQLは、それはほんの数ミリ秒かかり、次のいずれかのようである場合:
select * from haberler order by id desc limit 20,10;
私のmy.cnf設定は、このようなものです:
skip-locking
skip-innodb
query_cache_limit=1M
query_cache_size=256M
query_cache_type=1
max_connections=30
interactive_timeout=600000
#wait_timeout=5
#connect_timeout=5
thread_cache_size=384
key_buffer=256M
join_buffer=4M
max_allowed_packet=16M
table_cache=1024
record_buffer=1M
sort_buffer_size=64M
read_buffer_size=16M
max_connect_errors=10
# Try number of CPU's*2 for thread_concurrency
thread_concurrency=2
myisam_sort_buffer_size=128M
long_query_time = 1
log_slow_queries = /var/log/mysql/mysql-slow.log
max_heap_table_size=512M
ウェブサイトはcore2duo上で実行されています2GBのRAMを搭載。 私はこの問題がsort_buffer_sizeによって引き起こされるかもしれないとは思いますが、わかりません。ありがとうございます。
はまたあなたのインデックスも、あなたがこの側面に見ませんでしたか? –
あなたの質問には多くの不一致があります。あなたはそれをもっと明確にするために編集できますか? –
これは固定されていなければなりません。テーブルに使われている名前は本来トルコ語ですが、英語の一部を翻訳するのを忘れてしまったようです。 私の悪い英語のために申し訳ありません。 – intacto