我有一个查询,它按类别获取行。示例查询如下
例如从数据库中选择 *,其中 category = 14
有人对如何优化这一点以便查询能够运行得更快有什么想法或建议吗?
答案1
好吧,您有一个非常简单的查询。您可以通过选择较少的字段来加快查询速度,您真的需要行中的所有字段还是只需要某些字段。您还可以确保在类别字段上有索引。
答案2
最重要的事情是确保你在该cateogry
列上有索引。运行查询EXPLAIN
以查看它是否正在使用查询:
root@localhost:temp> explain select * from db where category = 14 \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: db
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 2
Extra: Using where
“使用 where” 意味着它正在进行全表扫描,其中它将每一行中类别列的值与 14 进行比较。如果有索引,mysql 可以直接跳转到相应的行。
root@localhost:temp> alter table db add index c1 (category);
root@localhost:temp> explain select * from db where category = 14\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: db
type: system
possible_keys: category
key: NULL
key_len: NULL
ref: NULL
rows: 1
Extra:
注意“possible_keys”字段,并且“Extra”是空的。
索引非常重要;没有索引的模式要么非常专业,要么只完成了一半。你应该看看mysql 中所有与索引相关的东西才能真正感受到它们有多么重要。