mysql - 在两列上使用排序优化简单的 mysql 查询

标签 mysql sql select sql-order-by query-optimization

我刚刚开始对我的查询运行解释并看到类型是 All 并且我正在使用文件排序。

我不确定如何优化最简单的查询,如果有人可以提供有关以下查询的指导,该查询主要按名字检索用户和订单,其次按名字检索用户和订单:

SELECT UserID, TRIM(FName) AS FName, TRIM(SName) as SName, pic
FROM users WHERE Blocked <> 1
ORDER BY FName, SName 
LIMIT  ?, 10

表创建如下:

CREATE TABLE IF NOT EXISTS `users` (
`UserID` int(11) NOT NULL,
  `FName` varchar(25) NOT NULL,
  `SName` varchar(25) NOT NULL,
  `Pword` varchar(50) NOT NULL,
  `Longitude` double NOT NULL,
  `Latitude` double NOT NULL,
  `DateJoined` bigint(20) NOT NULL,
  `Email` varchar(254) NOT NULL,
  `NotificationID` varchar(256) NOT NULL,
  `Pic` varchar(500) DEFAULT NULL,
  `Radius` int(11) NOT NULL,
  `ads` tinyint(1) NOT NULL,
  `Type` varchar(5) NOT NULL,
  `Blocked` tinyint(4) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=1469 DEFAULT CHARSET=latin1;

解释给出以下内容:

id : 1
select_type : SIMPLE
table : users 
type : ALL
possible_keys : NULL
key  : NULL
key_len : NULL
ref : NULL
rows : 1141
Extra : Using where; Using filesort

最佳答案

添加索引(Blocked, FName, SName)
如果可能,将位置更改为 Blocked = 0

关于mysql - 在两列上使用排序优化简单的 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34651343/

相关文章:

sql - 最多允许 10 个具有相同 GUID 的项目

php - 将 MySQL 数据库中的数据放入变量中

php - 使用 mysql_fetch_array 我可以轻松计算返回的行数。我可以用 mysql_fetch_object 做类似的事情吗?

mysql - innoDB - 我应该关闭 innodb_flush_log_at_trx_commit 吗?

PHP/Propel删除记录1 :n

mysql - Maria 数据库中的行锁定

php - Mysql连接错误

MySQL : Getting Entries from a many-to-many table

php - 插入选择 session 客户

sockets - 有一个多ip接口(interface)。如何选择其中一个来建立传出连接?