【发布时间】:2014-03-04 21:47:25
【问题描述】:
我有两个非常简单的表:
CREATE TABLE `tbl_words` (
`fld_id` int(11) NOT NULL AUTO_INCREMENT,
`fld_word` varchar(255) DEFAULT NULL,
`fld_cat_id` int(11) DEFAULT NULL,
PRIMARY KEY (`fld_id`)
);
这包含一长串单词,其中列出了大约 10,500 个单词。每个词里面也有一个CatID,对应这个表中的一个词类:
CREATE TABLE `j_word_cat` (
`fld_id` int(11) NOT NULL AUTO_INCREMENT,
`fld_cat` varchar(255) DEFAULT NULL,
PRIMARY KEY (`fld_id`)
);
从这些表中获取数据的页面每月获得大约 500,000 次页面浏览量。表中的数据是相当静态的,很少更新。
我发现我使用的 MySQL 数据库每天都会返回很多这样的错误:
查询期间与 MySQL 服务器的连接丢失
我想知道 - 如果我向“tbl_words”表添加一个新索引(例如,一个名为“catID”的索引并链接到“fld_cat_id”列),性能会得到改善。
或者我应该创建一个同时使用两者的索引,例如fld_id 和 fld_cat_id 一起?
任何建议将不胜感激。
谢谢
更新
我的查询非常简单 - 我实际上并没有加入表格。
用户从 j_word_cat 表中选择一个类别,然后该 ID 用于生成随机的单词列表,例如这些是我正在运行的一些常见查询:
-- Category table to populate SELECT drop down list of categories:
SELECT fld_cat, fld_id FROM j_word_cat ORDER BY fld_cat;
-- common word table selects:
-- the NOT IN bit is to exclude one category which I want to exclude by default unless the user actually chooses it
SELECT fld_word FROM tbl_words WHERE fld_cat_id NOT IN (24) ORDER BY RAND() LIMIT 50;
-- note that the value of 15 would vary depending on the category the user selected
-- 15 is just an example
SELECT fld_word FROM tbl_words WHERE fld_cat_id = 15 ORDER BY RAND() LIMIT 50;
SELECT fld_word FROM tbl_words ORDER BY RAND() LIMIT 60;
【问题讨论】:
-
您对这些表运行了哪些查询?需要该信息来确定所需的最佳索引。
-
简短的回答是肯定的!但也可以发布您的查询,它们可能也需要优化!
-
感谢您的快速回复 - 我已经发布了一些最常用的查询